4

解決済み: HTML::HeadParser をインストールして修正しました。しかし、なぜ突然機能しなくなったのか、まだわかりません。

以前は機能していた LWP リクエストの一部が機能しなくなったことに気付いたので、その理由を確認するために小さなスクリプトを作成しました。何らかの理由で、ほとんどのサイトからコンテンツとして何も返されません (これまでに機能したのは、icanhazip.com と gdata.youtube.com api の 2 つだけです)。ステータス 200 が返され、ヘッダーの適切な Content-Length が取得されます。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";

$res を DumpLex でダンプすると、次のようになります。

$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' );
4

2 に答える 2

3

このような状況で、モジュールが文書化された機能を超えて誤動作しているように思われる場合は、次のコマンドを使用して強制的に再インストールすると便利です。

cpan -f -i LWP::UserAgent

モジュールライブラリに他の問題がある場合に備えて、今すぐそれを行うことをお勧めします。

于 2012-06-23T17:43:28.257 に答える
1

あなたの質問にあるスクリプトは問題なく動作しています。ライブラリに問題があるに違いありません。

走ることをお勧めします

perl -MCPAN -e 'install LWP::UserAgent'

ライブラリが最新であることを確認します。

于 2012-06-23T15:37:06.743 に答える