Perl HTTP :: Request - 解析查询参数的最佳方法

时间:2017-09-16 18:37:15

标签: perl http

如果发生请求,我从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 ();
  ...

获得相同的结果。你认为这是一个好主意还是更好 - 更直接的方式?

1 个答案:

答案 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_paramquery_form_hash),但这些方法很容易使用。