工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

PowerShellによるHTTP Serverで、jsonデータのPOSTリクエストを引き受ける

概要

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オプションを指定しておかないと、深い位置にあるオブジェクトがシリアライズされないので注意。このオプションって何のためにあるんだろう???


まとめと今後の課題