Solución:
Debería 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 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 utilizar el método Invoke-RestMethod para tratar con las apis JSON y REST (lo que le ahorrará algunas líneas adicionales para la deserialización)
Usar Invoke-RestMethod
para consumir REST-API. Guarde el JSON en una cadena y utilícelo 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 un 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