Comment faire une requête POST en utilisant Powershell si le corps a un paramètre @type
je veux faire une requête POST dans PowerShell. Voici les détails du corps dans Postman.
{"@type":"login",
"username":"xxx@gmail.com",
"password":"yyy"
}
Comment puis-je transmettre ceci à PowerShell?
3 réponses
Vous devriez être en mesure de faire ce qui suit:
$params = @{"@type"="login";
"username"="xxx@gmail.com";
"password"="yyy";
}
Invoke-WebRequest -Uri http://foobar.com/endpoint -Method POST -Body $params
ceci enverra le post comme le corps. Cependant - si vous souhaitez poste comme un Json que vous pourriez être explicite. Pour poster ceci en tant que JSON, vous pouvez spécifier le ContentType et convertir le corps en Json en utilisant
Invoke-WebRequest -Uri http://foobar.com/endpoint -Method POST -Body ($params|ConvertTo-Json) -ContentType "application/json"
Bonus: vous pouvez également utiliser la méthode Invoke-RestMethod pour traiter avec JSON et REST apis (ce qui vous sauvera quelques lignes supplémentaires pour la désisérialisation)
Utiliser Invoke-RestMethod
pour consommer repos-APIs. Enregistrer au format JSON à une chaîne et l'utiliser comme le corps, ex:
$JSON = @'
{"@type":"login",
"username":"xxx@gmail.com",
"password":"yyy"
}
'@
$response = Invoke-RestMethod -Uri "http://somesite.com/oneendpoint" -Method Post -Body $JSON -ContentType "application/json"
si vous utilisez Powershell 3, je sais qu'il y a eu des problèmes avec Invoke-RestMethod
, mais vous devriez pouvoir utiliser Invoke-WebRequest
en remplacement:
$response = Invoke-WebRequest -Uri "http://somesite.com/oneendpoint" -Method Post -Body $JSON -ContentType "application/json"
si vous ne voulez pas écrire votre propre JSON à chaque fois, vous pouvez utiliser un hashtable et utiliser PowerShell pour le convertir en JSON avant de le poster. Ex.
$JSON = @{
"@type" = "login"
"username" = "xxx@gmail.com"
"password" = "yyy"
} | ConvertTo-Json
@Frode F. a donné la bonne réponse.
Par le Invoke-WebRequest
Vous imprime aussi le 200 OK
et beaucoup de bla, bla, bla... ce qui pourrait être utile, mais je préfère encore le Invoke-RestMethod
qui est plus léger.
Aussi, gardez à l'esprit que vous devez utiliser | ConvertTo-Json
pour le corps uniquement, pas d'en-tête:
$body = @{
"UserSessionId"="12345678"
"OptionalEmail"="MyEmail@gmail.com"
} | ConvertTo-Json
$header = @{
"Accept"="application/json"
"connectapitoken"="97fe6ab5b1a640909551e36a071ce9ed"
"Content-Type"="application/json"
}
Invoke-RestMethod -Uri "http://MyServer/WSVistaWebClient/RESTService.svc/member/search" -Method 'Post' -Body $body -Headers $header | ConvertTo-HTML
et vous pouvez ensuite ajouter un | ConvertTo-HTML
à la fin de la requête pour une meilleure lisibilité