概要
PowerShellによるHTTP Serverで、jsonデータのPOSTリクエストを引き受ける方法をメモした。
背景と目的
前回、PowerShellによるHTTP Serverの建て方がわかった。今回は、POSTメソッドのボディを読み取る。
詳細
1.参考
2.実装
各参考サイトを基に、重要な部分だけを抜き出すと、以下。 $requestは、前回のスクリプトと同様。
# bodyの取り出し -------------------------------------- # バッファを用意 $readBuf = New-Object byte[] $request.ContentLength64 # 読み取り $request.InputStream.Read($readBuf, 0, $request.ContentLength64) # UTF-8文字列に変換 $str = [System.Text.Encoding]::UTF8.GetString($readBuf) # JSONオブジェクトに変換 $jsonObj = ConvertFrom-Json $str
この処理により、POSTされたJSONのbodyを読み取れた。JSONオブジェクト内のデータ参照には、$jsonObj.キー名で読み出せる。そのさらに下層のオブジェクトには、$jsonObj.キー名.キー名2...とさらにドットをつければアクセスできる。
というわけで、前回のスクリプトで、必要に応じて挿入すればよさそうだ。
3.ファイルに書き出す
ついでに、JSONオブジェクトのファイルへの書き出しもやったので、メモ。
# シリアライズ $jsonStr = ConvertTo-Json $jsonObj -Depth 100 # 書き出し $jsonStr | Out-File 出力先ファイルパス -Encoding UTF8
ConvertTo-Jsonコマンドでシリアライズして、Out-Fileコマンドで書き出し。 ConvertTo-Jsonでは、-Depthオプションを指定しておかないと、深い位置にあるオブジェクトがシリアライズされないので注意。このオプションって何のためにあるんだろう???