web-dev-qa-db-ja.com

PowerShellを作成するPOSTリクエストの本文パラメーターが「@」で始まる場合

PowerShellでPOSTリクエストを作成します。Postmanの本文の詳細は次のとおりです。

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

PowerShellでこれを渡すにはどうすればよいですか?

40
live2learn

次のことができるはずです。

$params = @{"@type"="login";
 "username"="[email protected]";
 "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"

追加: JSONおよびREST apisを処理するためにInvoke-RestMethodを使用することもできます(これにより、シリアル化解除のために余分な行が節約されます)

53
Harald F.

REST-APIを使用するには、 Invoke-RestMethod を使用します。 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
45
Frode F.