rest powershell powershell-v5.0

rest - Cómo realizar una solicitud POST utilizando Powershell si el cuerpo tiene un parámetro @type



powershell-v5.0 (3)

Quiero hacer una solicitud POST en PowerShell. A continuación se muestran los detalles del cuerpo en el cartero.

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

¿Cómo paso esto en PowerShell?


@Frode F. dio la respuesta correcta.

Por Invoke-WebRequest también le imprime el 200 OK y un montón de bla, bla, bla ... lo que podría ser útil, pero todavía prefiero el Invoke-RestMethod que es más ligero.

Además, tenga en cuenta que necesita utilizar | ConvertTo-Json | ConvertTo-Json para el cuerpo, no para el encabezado:

$body = @{ "UserSessionId"="12345678" "OptionalEmail"="[email protected]" } | 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

y luego puedes añadir una | ConvertTo-HTML | ConvertTo-HTML al final de la solicitud para una mejor legibilidad


Debes poder hacer lo siguiente:

$params = @{"@type"="login"; "username"="[email protected]"; "password"="yyy"; } Invoke-WebRequest -Uri http://foobar.com/endpoint -Method POST -Body $params

Esto enviará la publicación como el cuerpo. Sin embargo, si desea publicar esto como un Json es posible que desee ser explícito. Para publicar esto como JSON, puede especificar el ContentType y convertir el cuerpo a Json usando

Invoke-WebRequest -Uri http://foobar.com/endpoint -Method POST -Body ($params|ConvertTo-Json) -ContentType "application/json"

Extra: también puede usar Invoke-RestMethod para tratar con apis JSON y REST (lo que le ahorrará algunas líneas adicionales para la deserialización)


Utilice Invoke-RestMethod para consumir las API REST. Guarde el JSON en una cadena y úselo como cuerpo, por ejemplo:

$JSON = @'' {"@type":"login", "username":"[email protected]", "password":"yyy" } ''@ $response = Invoke-RestMethod -Uri "http://somesite.com/oneendpoint" -Method Post -Body $JSON -ContentType "application/json"

Si usa Powershell 3, sé que ha habido algunos problemas con Invoke-RestMethod , pero debería poder usar Invoke-WebRequest como reemplazo:

$response = Invoke-WebRequest -Uri "http://somesite.com/oneendpoint" -Method Post -Body $JSON -ContentType "application/json"

Si no desea escribir su propio JSON cada vez, puede usar una tabla hash y usar PowerShell para convertirlo a JSON antes de publicarlo. Ex.

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