[Kansai-pm] cgiパラメータの順序

Yasushi Nakajima nakajima at netstock.co.jp
Tue Jul 20 04:18:12 CDT 2004


 これは私の同僚が遭遇し、原因を突き止めるのにずいぶん時間を費やした、あ
る日の出来事です。

 ある銀行のサイトで、自分の口座の取引明細など各種の情報が見られるように
なっていて、それをPerlで自動アクセスして情報を得ようと考えました。ブラウ
ザで情報を取得するときにcgiに送っているパラメータを調べて、それと同じ内
容を送ってやればよい、というのが基本的なアイデアです。(実際にはHTTPのヘッ
ダも絡むのと、得たHTMLから情報を取り出す部分もあるですが、そこは今回の話
とは直接関係しないので省略。)

 ほとんどのページについてはうまくいったのですが、あるページだけどうして
も「パラメータが異常」という趣旨のエラーメッセージが返ってくるばかりで肝
心の情報が取れません。

 「IEと同じパラメータを送っているはずなのに…。」で、生のリクエストの内
容を見てみると、IEはパラメータをパラメータ名でソートして並べて送っている
が、問題のスクリプトはソートしていない(Perlのハッシュの順序のまま)、と
いう点しか違いはないことがわかりました。「まさか…」と思いつつソートして
送ってみると、ちゃんと情報が返ってきたではありませんか。

 どうやらこのページの処理をするcgiプログラムは、IEのようにcgiパラメータ
はソートして送られるという前提で書かれている様子。他のページはそういうこ
とはないので、おそらくバグ取りの漏れなんでしょう。

 それにしても、cgiパラメータがパラメータ名でソートされて送られてくるこ
とを前提に書かれたcgiプログラムって、いったいどういう風に書いてるんでしょ
うか。少なくともPerlは使ってないんでしょうね。

※Webサービス化されていればこんな馬鹿げた苦労はないんでしょうが、現状で
は結構こういう泥臭いことも必要です。

-- 
Yasushi Nakajima <nakajima at netstock.co.jp>




More information about the Kansai-pm mailing list