TOP 投稿 過去ログ 管理用 RSS RDF

POST時のQUERY_STRINGを横取る方法は?

URL:http://www.nurs.or.jp/~sug/homep/spam/index.htm
CGIが動き出す前に環境変数などを調べるLQアクセス制限ライブラリですが、POSTの時にどんなデータが送られてきたか表示されません。

リンクのURLで呼び出される場合はGET。GETには文字数制限があるので、フォームによる書き込みには不向きです。そのためフォームではPOSTが使われます。POSTには決まった文字制限が無く、CGIは標準入力から読み込むことになります。
アクセス制限のため、アクセス情報を解析することになりますが、標準入力は一度しか読み取れないので、勝手にQUERY_STRINGを読み込んでしまうとCGIが情報を取得できないことになります。
とりあえずseek(STDIN, 0, 0);で巻き戻してみようとか考えたけど無理でした。たぶん0でしょう。どうにかするには「read以外でSTDINから読み取る」または「もう一度STDINにデータを入れる」または「STDIN以外からデータをCGIに渡す」ということになるでしょう。
-----------------------
スパムフィルターCGIでは実装されているらしい。
多分、こういう「フィルター動作するアンチスパムCGI」ってのがあまり一般的でない理由というのは、『POSTメソッドによる投稿のケースで、読み込んだ標準入力の内容をもう一度標準入力に戻すやり方が判らない!』というのが技術的な隘路かもしれない。これは実は「双方向パイプ」の変形で実現できる。
http://www.nurs.or.jp/~sug/homep/spam/spam3.htm