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