URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

"Invoke-RestMethod"とかの文字コード

 ここのところ、Windows環境からREST APIを叩くためにPowerShellで"Invoke-WebRequest"や"Invoke-RestMethod"を頻繁に使っています。
 このとき、POSTメソッドとかのBodyに含まれているマルチバイト文字がUTF-8として認識されていなかった。
 基本的なことなんだけど、やり方が分かるまでちょっと苦戦したのでメモ。

 結論としてはデータ型をバイト列にして送ればいい。
 自分はBodyをヒアドキュメントで記述することが多いので、以下のようにエンコードしてPOSTする。

$BodyXml = @" <root> <data1>データ01</data1> <data2>データ02</data2> </root> "@ $Byte = [System.Text.Encoding]::UTF8.GetBytes($BodyXml) $Res = Invoke-RestMethod -Uri "http://localhost/api" -Method POST -Body $Byte

 いつまで経っても文字コードでハマるんだよなぁ…。