Perl HTTP :: Request - 解析查询参数的最佳方式
问题描述:
如果请求发生,我会从Web服务器获取HTTP :: Request对象。我只在URL中看到GET-query-parameters,或者它是来自标题中的POST。Perl HTTP :: Request - 解析查询参数的最佳方式
有没有一种方法HTTP :: Request或任何其他包以一种很好的方式给我这些参数(例如哈希),我不需要自己解析它?
例如GET http://example.net?a=3&b=jack
我不想从URL或HTTP-Header(如果POST)手动解析它,而是想要访问(= 3)和b(= jack)的值。
谢谢!
编辑
感谢有关包URI的好建议。它完美适用于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();
...
得到相同的结果。你认为这是一个好主意,还是有更好 - 更直的方式?
答
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_param
和query_form_hash
)方便,但是太容易出错的使用方法$uri
。
https://metacpan.org/pod/URI::QueryParam,https://metacpan.org/pod/CGI –