Как сделать запрос 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 в конце запроса на лучшую читаемость