2012-06-23 52 views
4

求解:我通過安裝HTML :: HeadParser來解決它。 但我仍然不知道爲什麼它突然停止工作。沒有來自LWP請求的內容

我注意到一些曾經工作過的LWP請求已經停止工作,所以我做了一個小腳本來檢查原因。 出於某種原因,我沒有得到任何回報,因爲大多數網站的內容(迄今爲止唯一的兩個工作是icanhazip.com和gdata.youtube.com api)。 我收到狀態200,併爲標題獲取正確的Content-Lenght。 我試着在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'); 
+1

你說哪些網站有效,但哪些網站沒有。你如何確定你「不會收到任何內容」?轉儲錯誤的響應對象:'使用Data :: Dump :: Streamer; DumpLex $ res;' – daxim

回答

1

腳本你有你的問題是工作得很好。我敢打賭,你在圖書館遇到了一些問題。

我建議你運行

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

,以確保您的庫是最新的更新。

+2

@GraveRaven - 我看到你剛剛更新了你的問題,已解決:我解決了安裝HTML :: HeadParser的問題。**我相信'HTML :: HeadParser'安裝的一部分是'LWP :: UserAgent'庫,所以你間接地更新了這個庫,這有所幫助。由於某些未知原因,您的系統上安裝了舊的或損壞的庫,所以腳本沒有按預期運行。祝你好運! –

+0

奇怪的是,試圖更新LWP :: UserAgent(我嘗試的第一件事之一)導致消息LWP :: UserAgent是最新的 – GraveRaven

+0

@GraveRaven:你爲什麼不這麼說? – simbabque

3

在這樣的情況下,當一個模塊似乎是行爲不端超出其記錄的功能,這將是有益的重新安裝與

cpan -f -i LWP::UserAgent 

,我建議你這樣做,現在的情況下有是你模塊庫的其他問題。

+0

這可能有效。如果我跑到類似的地方,請記住這一點。 – GraveRaven

相關問題