如果发生请求,我从Web服务器获取对象HTTP :: Request。我只在URL中看到GET-query-parameters,或者它是来自标题中的POST。
是否有一种方式HTTP :: Request或任何其他包以一种很好的方式给我这些参数(例如哈希),我不需要自己解析它?
e.g。得到 http://example.net?a=3&b=jack
我想访问a(= 3)和b(= jack)的值而不从URL或HTTP-Header手动解析(如果是POST)。
谢谢!
修改
感谢有关包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 ();
...
获得相同的结果。你认为这是一个好主意还是更好 - 更直接的方式?
答案 0 :(得分: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向$uri
添加了在这种情况下看起来很方便的方法(query_param
和query_form_hash
),但这些方法很容易使用。