web-dev-qa-db-fra.com

Faire un PowerShell POST demande si un paramètre de corps commence par '@'

Je veux faire une demande POST dans PowerShell. Voici les détails du corps dans Postman.

{
  "@type":"login",
  "username":"[email protected]",
  "password":"yyy"
}

Comment passer cela dans PowerShell?

40
live2learn

Vous devriez pouvoir effectuer les opérations suivantes:

$params = @{"@type"="login";
 "username"="[email protected]";
 "password"="yyy";
}

Invoke-WebRequest -Uri http://foobar.com/endpoint -Method POST -Body $params

Cela enverra le message en tant que corps. Cependant - si vous souhaitez publier ceci en tant que Json, vous voudrez peut-être être explicite. Pour publier 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"

Extra: Vous pouvez également utiliser l'Invoke-RestMethod pour traiter avec JSON et REST apis (ce qui vous fera économiser quelques lignes supplémentaires pour la désérialisation))

53
Harald F.

Utilisation Invoke-RestMethod pour consommer les API REST. Enregistrez le JSON dans une chaîne et utilisez-le comme corps, par exemple:

$JSON = @'
{"@type":"login",
 "username":"[email protected]",
 "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 souhaitez pas écrire votre propre JSON à chaque fois, vous pouvez utiliser une table de hachage et utiliser PowerShell pour le convertir en JSON avant de le publier. Ex.

$JSON = @{
    "@type" = "login"
    "username" = "[email protected]"
    "password" = "yyy"
} | ConvertTo-Json
45
Frode F.