已解决:我通过安装 HTML::HeadParser 修复了它。
但我仍然不知道为什么它突然停止工作。


我注意到一些以前工作过的 LWP 请求停止工作,所以我制作了一个小脚本来检查原因。
出于某种原因,我没有从大多数网站(目前唯一有效的两个网站是 icanhazip.com 和 gdata.youtube.com api)获取任何内容作为内容。
我得到状态 200 并得到正确的标题内容长度。
我已经尝试在 curl 和 wget 中获取页面没有问题。如果我使用 tcpdump 检查请求,我确实会收到包含所有正确信息的回复。
我已经尝试过 LWP::UserAgent 和 LWP::Simple,结果相同。

#!/usr/bin/perl
use warnings;
use strict;
use LWP::UserAgent;

my $agent = LWP::UserAgent->new;
$agent->agent("Mozilla/5.0");

my $req = HTTP::Request->new(GET => 'http://stackoverflow.com');
my $res = $agent->request($req);

print $res->status_line, "\n";
print $res->header("Content-Length"), "\n";
print $res->content, "\n";

使用 DumpLex 转储 $res 给出以下结果:
$HTTP_Response1 = bless( {
                    _content => '',
                    _headers => bless( {
                                  "cache-control"
                                               => 'public, max-age=15',
                                  "client-aborted"
                                               => 'die',
                                  "client-date"
                                               => 'Sat, 23 Jun 2012 15:07:23 GMT',
                                  "client-peer"
                                               => '64.34.119.12:80',
                                  "client-response-num"
                                               => 1,
                                  connection   => 'close',
                                  "content-length"
                                               => 211684,
                                  "content-type"
                                               => 'text/html; charset=utf-8',
                                  date         => 'Sat, 23 Jun 2012 15:07:22 ',
                                  expires      => 'Sat, 23 Jun 2012 15:07:38 ',
                                  "last-modified"
                                               => 'Sat, 23 Jun 2012 15:06:38 GMT ',
                                  vary         => '*',
                                  "x-died"     => 'Can\'t locate HTML/HeadParser.pm in @INC (@INC contains: /usr/lib/perl5/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/core_perl /usr/share/perl5/core_perl .) at /usr/share/perl5/site_perl/LWP/UserAgent.pm line 663.'
                                }, 'HTTP::Headers' ),
                    _msg     => 'OK',
                    _protocol
                             => 'HTTP/1.1',
                    _rc      => 200,
                    _request => bless( {
                                  _content => '',
                                  _headers => bless( {
                                                "content-type" => 'application/html',
                                                "user-agent"   => 'Mozilla/5.0'
                                              }, 'HTTP::Headers' ),
                                  _method  => 'GET',
                                  _uri     => \do { my $v = 'http://stackoverflow.com/' },
                                  _uri_canonical
                                           => 'V: $HTTP_Response1->{_request}{_uri}'
                                }, 'HTTP::Request' ),
                    default_add_content
                             => 1
                  }, 'HTTP::Response' );
$HTTP_Response1->{_request}{_uri_canonical} = $HTTP_Response1->{_request}{_uri};
bless( $HTTP_Response1->{_request}{_uri}, 'URI::http' );

最佳答案

在这种情况下,当一个模块的行为似乎超出其记录的功能时,强制重新安装会很有用

cpan -f -i LWP::UserAgent

我建议你现在就这样做,以防你的模块库有其他问题。

关于perl - LWP 请求中没有内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11169033/

10-13 08:54