2011-10-27 11 views
1

私はPerlバックエンドを使ってFacebookブックを作成しています。問題は、FacebookがPOSTリクエストとして私のWebアプリケーションにリクエストを送信するので、アプリケーションのベースURLの一部でもあるGETパラメータを取得することに問題があることです。実際には、POSTパラメータを取得するだけです$ CGI-> Varsから。POSTリクエストでGETリクエストとPOSTリクエストの両方のパラメータを取得するにはどうすればよいですか?

答えて

13

CGI/MIXING POST AND URL PARAMETERSを参照してください。

ショートバージョン:ポストパラメタには$CGI->param()、クエリ文字列パラメータには$CGI->url_param()を使用します。

+0

も問題はURLがアプリケーションの状態を追跡するためのパラメータを取得使用している、私はアイデアを取得し、ポストのparams混在させないことです推測することである - それは一部である以外RFCの標準の私はなぜこれが重要なのか理解していない - サーバ上の何も変化していない、それはちょうどどのステップを実行するのかを検出する – qodeninja

+2

@nodebunny、なぜ重要なのでしょうか?あなたは「なぜ彼らは異なる方法で取り出されているのですか」という意味ですか? 「URLクエリ文字列の内容が、POSTされたフォームの同様の名前のCGIパラメータを妨害することはありません」。この機能は、あなたが言ったことに応じて特に重要です。 – ikegami

+0

なぜGETとPOSTを分けておくのが重要か...しかし、私はその意味を理解していると思います。あなたは何かをGETパラメータとして設定することはできたくないし、POSTのパラメタとして扱わなければなりません。それ以外の場合はPOSTの目的を破るでしょうか?しかし私の目的のために、私は特定のパラメータだけを探しているので、私はそのミュートポイントを推測します。私が必要とするパラメータは、その取得または送信の問題ではありません。しかし、私は状況をより良く理解しています。議論のための+1 – qodeninja

5

より良いインターフェイスのためにCGIをダンプします。 Plackのparamメソッドは、GETとPOSTのパラメータを混合して返します。

plackup -MPlack::Request -e 'sub { 
    my ($env) = @_; 
    my $r = Plack::Request->new($env); 
    return [200, ["Content-Type" => "text/plain"], [join "\n", $r->param("foo")]]; 
}' 

> lwp-request -m POST -USe 'http://localhost:5000/fnord?foo=bar;baz=quux' 
Please enter content (application/x-www-form-urlencoded) to be POSTed: 
foo=123;baz=456 
␄ 
POST http://localhost:5000/fnord?foo=bar;baz=quux 
User-Agent: lwp-request/6.03 libwww-perl/6.03 
Content-Length: 16 
Content-Type: application/x-www-form-urlencoded 

200 OK 
Date: Thu, 27 Oct 2011 21:27:46 GMT 
Server: HTTP::Server::PSGI 
Content-Length: 7 
Content-Type: text/plain 
Client-Date: Thu, 27 Oct 2011 21:27:46 GMT 
Client-Peer: 127.0.0.1:5000 
Client-Response-Num: 1 

bar 
123 
+0

+1 plack/lwpソリューションの共有 – qodeninja

関連する問題