read timeout at /usr/lib/perl5/site_perl/5.8.8/LWP/Protocol/http.pm line 426. at /usr/lib/perl5/site_perl/5.8.8/LWP/UserAgent.pm line 844
任何人都知道嗎?如何讓LWP繼續而不是在超時發生時終止?
read timeout at /usr/lib/perl5/site_perl/5.8.8/LWP/Protocol/http.pm line 426. at /usr/lib/perl5/site_perl/5.8.8/LWP/UserAgent.pm line 844
任何人都知道嗎?如何讓LWP繼續而不是在超時發生時終止?
只要繼續什麼?
如果您想禁用超時,只需在您的用戶代理對象上調用->timeout(0)
即可。
爲防止異常結束您的過程,請將代碼包裝在eval {}
塊中;見http://perldoc.perl.org/functions/eval.html。
但我很想知道你是如何得到你顯示的異常的;以正常方式使用LWP將已經捕獲該異常並返回錯誤響應,從而允許您的代碼繼續。如果您需要幫助,請顯示您的代碼。
LWP 確實繼續下一條語句超時。具體來說,它返回一個帶有5xx錯誤代碼的HTTP :: Response對象。
>perl -MLWP -e"my $ua = LWP::UserAgent->new(timeout => 1); print $ua->get('http://...something really slow...')->as_string;"
500 read timeout
Content-Type: text/plain
Client-Date: Thu, 30 Jun 2011 06:35:11 GMT
Client-Warning: Internal response
read timeout at .../lib/LWP/Protocol/http.pm line 433.
有時候,當發送請求並接收響應,然後連接在這個過程中間中斷(Internet連接出現故障),LWP將返回200的$response->code
,並且將有一個$response->content
等於您請求的內容的部分下載。然後,如果您重試,您將立即得到讀取超時錯誤。
當然,只有在流程的某個特定部分丟失連接時纔會發生這種情況......但這種情況發生了。
我建議您驗證您收到的內容是否完整,如果不是,請在嘗試下一次連接之前先解決該問題。
繼續運行剛纔終止的下一條語句。 –
如果將超時設置爲「0」,LWP可能會永久掛在那裏嗎? –
否,0表示不超時。 – ysth