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に書いてあるレスポンスを返す。