Unengineered Weblog

PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND

POST RequestをハンドルするシンプルすぎるHTTPサーバー

github.com

Usage

postsrv [-flag] cmd [arg ...]

postsrvはとてもシンプルなHTTPサーバー。 カレントディレクトリをサーブするファイルサーバーとほとんど同じだが、/uploadはPOSTリクエストをハンドルする。 POSTリクエストのBodyが標準入力を通してcmdへ送られ、cmdの標準出力がレスポンスとなる。

Example

postsrv cat

とすれば、/uploadへPOSTしたフォームがそのままレスポンスとして返ってくるサーバーになる。 基本的にはカレントディレクトリに<form action='/upload' ...>タグを含んだindex.htmlをおいて使う。

また-mフラッグによってmultipart/form-data形式でPOSTされたファイルを扱える。ファイルが複数あるときはconcatenateされ標準入力へ送られる。

postsrv -m cat

なぜ作ったか

いま僕はJavaScriptのお勉強をしている。 このときPOSTリクエストをハンドルするサーバーをサクッと作れると便利だった。 毎回サーバーをイチから実装するのは面倒くさいので、シェルスクリプトの要領で簡単に作れるようにした。 このUnixコマンドへ入出力させるという単純だが強力な手法は応用が効きそうだなっていつも考えている。

応用

POSTされたデータをターミナルへ出力

postsrv sh -c 'cat > /dev/tty'

文字列操作

postsrv tr a-z A-Z

POSTされたテキストデータを大文字化して返す。

画像を操作する

postsrv -m convert - -negate -

画像ファイルをPOSTするとImageMagickのconvert(1)によって色が反転された画像が返ってくる。

POSTされたデータを保存して、レスポンスを返す

postsrv sh -c 'cat > $(mktemp); cat response'

POSTされたデータをランダムな名前のファイルに保存し、ファイルresponseに書いてあるレスポンスを返す。