Как сделать запрос POST с помощью Powershell, если тело имеет параметр @type
Я хочу сделать запрос POST в PowerShell. Ниже приведены детали тела в Postman.
{"@type":"login",
"username":"xxx@gmail.com",
"password":"yyy"
}
Как передать это в PowerShell?
3 ответов
вы должны быть в состоянии сделать следующее:
$params = @{"@type"="login";
"username"="xxx@gmail.com";
"password"="yyy";
}
Invoke-WebRequest -Uri http://foobar.com/endpoint -Method POST -Body $params
это отправит сообщение как тело. Однако - если вы хотите опубликовать это как Json, вы можете захотеть быть явным. Чтобы опубликовать это как JSON, вы можете указать ContentType и преобразовать тело в Json с помощью
Invoke-WebRequest -Uri http://foobar.com/endpoint -Method POST -Body ($params|ConvertTo-Json) -ContentType "application/json"
дополнительные: вы также можете использовать Invoke-RestMethod для работы с JSON и REST API (что сэкономит вам несколько дополнительных строк для де-сериализации)
использовать Invoke-RestMethod
потреблять REST-API. Сохраните JSON в строку и используйте ее как тело, например:
$JSON = @'
{"@type":"login",
"username":"xxx@gmail.com",
"password":"yyy"
}
'@
$response = Invoke-RestMethod -Uri "http://somesite.com/oneendpoint" -Method Post -Body $JSON -ContentType "application/json"
если вы используете Powershell 3, я знаю, что были некоторые проблемы с Invoke-RestMethod
, но вы должны иметь возможность использовать Invoke-WebRequest
замена:
$response = Invoke-WebRequest -Uri "http://somesite.com/oneendpoint" -Method Post -Body $JSON -ContentType "application/json"
если вы не хотите писать свой собственный JSON каждый раз, вы можете использовать хэш-таблицу и использовать PowerShell, чтобы преобразовать его в JSON перед публикацией. Бывший.
$JSON = @{
"@type" = "login"
"username" = "xxx@gmail.com"
"password" = "yyy"
} | ConvertTo-Json
@Frode F. дал правильный ответ.
кстати Invoke-WebRequest
также печатает вам 200 OK
и много бла, бла, бла... что может быть полезно, но я все еще предпочитаю Invoke-RestMethod
, который легче.
кроме того, имейте в виду, что вы должны использовать | ConvertTo-Json
только для тела, а не для заголовка:
$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
и вы можете добавить | ConvertTo-HTML
в конце запроса на лучшую читаемость