2017-09-16 42 views
0

要求が発生した場合、WebサーバーからオブジェクトHTTP :: Requestを取得します。 URLにGET-query-parametersが表示されるのは、ヘッダー内のPOSTからのものだけです。Perl HTTP :: Request - クエリパラメータを解析する最も良い方法

HTTP :: Requestや他のパッケージが私にこれらのパラメータをいい方法(ハッシュなど)で与える方法はありますか?自分で解析する必要はありませんか?

GET http://example.net?a=3&b=jack

URLまたはHTTPヘッダー(POSTの場合)から手動で解析することなく、a(= 3)およびb(= jack)の値にアクセスしたいとします。

ありがとうございます!パッケージURIについての良いアドバイスに

EDIT

感謝。これは、URLのパラメータに対して完全に機能します。

ただし、パラメータが本体にあるPOSTでは使用できません。私はそれを適応させた。

if ($req->method eq "POST")  # $req is HTTP::Request 
{   { 
    my $uri = URI->new ("/whatever?" . $req->content); # not very pretty 
    %params = $uri->query_form(); 
    ... 

同じ結果が得られました。あなたはそれが良いアイデアだと思っているのですか、それとももっと良い方法がありますか?

+2

https://metacpan.org/pod/URI::QueryParam、https://metacpan.org/pod/CGI –

答えて

1
use List::Util qw(pairs); # Version 1.29+ 
use URI  qw(); 

my $uri = URI->new($request->uri); 

# If none of the parameters can have multiple values. 
# Usage: my $value = $params{$key}; 
my %params = $uri->query_form(); 

# If some of the parameters can have multiple values. 
# Usage: my $value = $params{$key}[0]; 
# Usage: my @values = @{ $params{$key} }; 
my %params; 
for my $pair (pairs $uri->query_form()) { 
    my ($key, $value) = @$pair; 
    push @{ $params{$key} }, $value; 
} 

URI::QueryParamこの状況(query_paramquery_form_hash)に便利なように見えますが、あまりにもエラーが発生しやすい使用している$uriにメソッドを追加します。

関連する問題