【发布时间】:2014-02-06 02:26:41
【问题描述】:
我正在尝试使用 HTTP::Request->parse 方法解析 HTTP 请求字符串,
GET / HTTP/1.1
Host: www.google.com
Referer: www.google.com
Cookies: A=B
(在它的末尾还有另一个“\r\n”,但我不能在不破坏语法高亮的情况下追加它..)
上面的字符串在我用nc www.google.com 80 < request发送时有效
现在我尝试解析并通过 LWP 发送:
use warnings;
use strict;
use File::Slurp qw/read_file/;
use HTTP::Request;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $request = HTTP::Request->parse (read_file ('/run/shm/request'));
print Dumper ($request);
my $r = $ua->request ($request);
if ($r->is_success)
{
print $r->decoded_content;
}
else
{
print $r->status_line;
}
我得到:
$VAR1 = bless( {
'_headers' => bless( {}, 'HTTP::Headers' ),
'_content' => '',
'_protocol' => 'HTTP/1.1',
'_method' => 'GET',
'_uri' => bless( do{\(my $o = '/')}, 'URI::_generic' )
}, 'HTTP::Request' );
400 URL must be absolute
所以解析器不起作用,它无法解析 URI 和标头。
有什么想法吗?
【问题讨论】:
-
请总是
use strict和use warnings在每个 Perl 程序的顶部,尤其是当您寻求帮助时。 -
@Borodin 我做了,只是在粘贴中删除了它,是的,没有来自 Perl 的抱怨 ;-)
-
最好发布您的完整代码,或展示相同不当行为的简化版本。这个特殊问题不太可能是由
strict或warnings发现的任何东西引起的,但更常见的是会有额外的和不必要的反复要求你添加它们并显示结果。 -
哦,我明白你的意思了,我会在这里和下次将它们包括在内,谢谢@Borodin