Как сделать запрос POST с использованием Powershell, если у тела есть параметр @type

Я хочу сделать запрос POST в PowerShell. Ниже перечислены детали тела в Postman.

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

Как передать это в PowerShell?

Ответы

Ответ 1

Вы должны быть в состоянии сделать следующее:

$params = @{"@type"="login";
 "username"="[email protected]";
 "password"="yyy";
}

Invoke-WebRequest -Uri http://foobar.com/endpoint -Method POST -Body $params

Это будет опубликовать тело, как вы указали.

Ответ 2

Используйте Invoke-RestMethod для использования REST-API. Сохраните JSON в строке и используйте это как тело, например:

$JSON = @'
{"@type":"login",
 "username":"[email protected]",
 "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" = "[email protected]"
    "password" = "yyy"
} | ConvertTo-Json