• 締切済み

query stringの受け取りについて

http://hogehoge/hoge.cgi?input=xxx」のように 飛んできたリクエストからQUERYSTRINGの値(input)を取得したい場合にGETで来てもPOSTで来ても取得は 可能でしょうか? GETで取れて、POSTで取れない原因で何か考えられる 原因とかありましたら教えて下さい。 よろしくお願いします。

みんなの回答

  • t140
  • ベストアンサー率39% (59/150)
回答No.2

一般に環境変数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)
回答No.1

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'}; }

関連するQ&A