【问题标题】:Having problem setting parameters for LWP::UserAgent为 LWP::UserAgent 设置参数时遇到问题
【发布时间】:2011-06-29 11:48:00
【问题描述】:
my %parameters = (
                        key => 'value'
                 );
my $response = $ua->get('http://example.com/i', %parameters);

我正在尝试获取http://example.com/i?key=value 的内容,但调试后我发现%parameters 存储在http 标头而不是url 参数中。

我的代码有什么问题?

虽然 perldoc 告诉我:

$ua->get( $url , $field_name => $value, ... )

但如果我将这些参数放在%parameters 中,它也应该可以工作,对吧?

【问题讨论】:

    标签: perl lwp-useragent


    【解决方案1】:

    get 的附加参数是 HTTP 标头。对于 GET 请求,参数包含在 URL 本身中,URL 编码。您可以使用 URI 模块创建适当的 URL,包括 GET 变量,或者自己构建它们(可能使用 URI::Escape 对值进行 urlencode)。

    例如:

    my %parameters = (
                            key => 'value'
                     );
    my $url = URI->new("http://example.com/i");
    $url->query_form(%parameters);
    my $response = $ua->get($url);
    

    【讨论】:

    • %parameters 应该是一个数组。您可以在 URL 中重复参数。 @parameters = ('a[]'=>42, 'a[]'=43) 是一组有效的字段。
    【解决方案2】:

    来自fine manual

    $ua->get($url)
    $ua->get( $url , $field_name => $value, ... )
    此方法将在给定的 $url 上发送一个 GET 请求。 可以提供更多参数来初始化请求的标头。

    强调我的。您误读了文档,get() 的额外参数是 HTTP 标头字段,而不是 CGI 参数。如果您想包含一些 CGI 参数,那么您必须自己将它们添加到 URI(最好使用URI)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-11
      • 2011-10-15
      • 1970-01-01
      • 2011-09-24
      • 2021-06-11
      • 2011-04-10
      • 2013-05-06
      相关资源
      最近更新 更多