2
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, ... )

但是,如果我将这些参数放在 a 中,它也应该起作用%parameters,对吗?

4

2 回答 2

11

附加参数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);
于 2011-06-29T03:45:53.047 回答
3

来自精美手册

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

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

于 2011-06-29T03:48:00.427 回答