2007/08/06

Ruby 1.8 でCGI

VMWareで仮想サーバーを立てる時に、いろいろなしがらみで固定IPを作りたいので、家のDNSサーバーで頻繁に変更が入る。
これをお題にDNSのゾーンエントリを編集する、cgi.rb を使ったCGIを作ってみた。

Formタグを使うときに、POSTメソッドを使っていると、QUERY_STRINGの自動パースが行なわれないので、少し問題がある。
FormのActionに指定するのが "?cmd=checkout" だとすると、

@cgi=CGI.new
@cgi['checkout'] ..< nilになる
そこで手でちゃんと
CGI.parse("QUERY_STRING")["checkout"]
ぐらいをすると、 問題なくなるのだけれど、ちょっとはまった。

ここら辺の動きは、サーバー側の動きとして、どう動くのが正しいとかあるのかなぁ。
cookieが使えない場合とかURLに変数を埋め込むのも普通にあるから、POSTメソッドで渡ってきた変数も、Formで渡ってきた変数も、アクセスするAPIは統一しないと具合がわるい。

自動的に展開するなら、POSTで同名の変数がある場合は、まずQUERY_STRINGをparseしてから、Formの変数で上書きするのがPOSTを信用するために必要そうかな。

0 件のコメント: