- 締切済み
query stringの受け取りについて
「http://hogehoge/hoge.cgi?input=xxx」のように 飛んできたリクエストからQUERYSTRINGの値(input)を取得したい場合にGETで来てもPOSTで来ても取得は 可能でしょうか? GETで取れて、POSTで取れない原因で何か考えられる 原因とかありましたら教えて下さい。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- t140
- ベストアンサー率39% (59/150)
一般に環境変数REQUEST_METHODを見て、GETかPOSTかで処理を分けて データを取得するCGIが多いですが、POST送信であっても "?" 以降のデータを取得することは可能です。 # POSTの場合 if ($ENV{REQUEST_METHOD} eq 'POST') { read (STDIN, $query, $ENV{CONTENT_LENGTH}); } # GETあれば連結 if ($ENV{QUERY_STRING} ne ''){ $query.= $query ne '' ? '&' : ''; $query.= $ENV{QUERY_STRING}; }
- daaman
- ベストアンサー率36% (55/151)
GETでもPOSTでも取得できます。 POSTは標準入力、GETは環境変数へデータが入ってきますので、どちらで要求があったかで値の取得方法が変わりますので、 GETの方しか記述してないのが原因ではないでしょうか? 取得方法は、POSTなら標準入力からCONTENT_LENGTH分の値を取得しますし、GETなら環境変数のデータをそのまま取得すればいいことになります。 以下の例では変数$queryに値が入ります。 if ($ENV{'REQUEST_METHOD'} eq 'POST' ) { # POSTの場合 read (STDIN, $query, $ENV{'CONTENT_LENGTH'} ); } else { # GETの場合 $query = $ENV{'QUERY_STRING'}; }