人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Perl の CGI.pm について質問致します。

自分は通常、

use CGI;
$q = new CGI;
$os= $q->param('OS');

という風にフォームからデータを受け取っているのですが、この場合はPOST、GET、両方で受け取ることができるのでしょうか?

form 上での指定はPOSTにしているのですが、アドレス直接打ち込みでGET渡しも生きてくるのでしょうか?

自分で実験したところ、POST、GET両方で可能でした。(POSTだけを有効にしたいのですが、、、。)

●質問者: zachouR
●カテゴリ:インターネット ウェブ制作
✍キーワード:CGI OS Perl pm アドレス
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● tkyk3
●27ポイント

基礎的なことなんでしょうけど、私も気になっていましたがよく分かっていなかったので、ちょっと調べてみました。

http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod

POSTとURLパラメータの混合

$color = $query->url_param('color');

問い合わせ文字列(引数が後ろについた"?"マーク)が入ったURLへ POSTするフォームを作成することにより、スクリプトはフォームと同じように CGIパラメータをURLで受け取ることは可能です。param()メソッドは、 URLの問い合わせ文字列を無視し、常にPOSTされたフォームの内容を返します。 URLパラメータを取り出すためにはurl_param()メソッドを呼び出してください。 param()と同じように使ってください。大きな違いはパラメータを読むことは常にできますが、設定はできません。

いかなる状況においても、URL問い合わせ文字列の内容がPOSTされたフォームの同じ名前のCGIパラメータを干渉することはありません。URL問い合わせ文字列と GETメソッドでサブミットされるフォームとを混ぜてみると、その結果はあなたが予想しなかったことになるでしょう。

ということは、POSTとURLのどちらもある場合には、POSTが必ず優先されるということになるかと思います。そういう場合に、URL文字列も知りたい、というときに、url_param()を使えと。

こういう認識になると思いますが、如何でしょうか。

◎質問者からの返答

なるほどー!ありがとうございます。

しかし、POSTだけ有効にしたい、GETだけ有効にしたい、という場合は、url_param()を使ってチェックする必要があるのでしょうか?

うーん、、、。


2 ● tezcello
●27ポイント

POSTでもGETでも意識しないで使えるのがウリらしいです。

OSというパラメータがPOSTであるかの確認は、

$ENV{'REQUEST_METHOD'} の値を調べる

$ENV{'QUERY_STRINGS'} に、OS= の文字列が無い

などのチェックをしてみては?


以前、CGI.pm(cgi-lib.pl だったかも)を使っていましたが、仕様が変わった(らしい)のに気が付かず、原因がわかるまで凄く時間がかかってしまいました。(実際の原因は別にあるのかも知れませんが)

それ以来、自作のスクリプトをライブラリ化して使うようになりました。そんなに難しい処理をするわけではないですし。

http://q.hatena.ne.jp/1194414548

◎質問者からの返答

ありがとうございます。

GETから受け取る場合はプログラムに別の処理をさせたかったので、、、。

GETで投げるのは簡単そうなので、いたずらずきのちみっ子が、なんかするかもなーとか思ってしまいまして、、、。


3 ● iwaim
●26ポイント

POST、GETの両方ともで有効になります。

HTTPリクエストで使われるメソッド(GETとかPOSTとか)はCGIモジュールのrequest_methodメソッドで取得できますので、それを使って振り分ければ解決するでしょう。

use CGI;

my $q = new CGI;

if($q->request_method() == 'POST') {

my $os= $q->param('OS');

....

}

http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod

◎質問者からの返答

ありがとうございます。これは参考にさせて頂きます!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ