2011-06-30 19 views

回答

1

只要繼續什麼?

如果您想禁用超時,只需在您的用戶代理對象上調用->timeout(0)即可。

爲防止異常結束您的過程,請將代碼包裝在eval {}塊中;見http://perldoc.perl.org/functions/eval.html

但我很想知道你是如何得到你顯示的異常的;以正常方式使用LWP將已經捕獲該異常並返回錯誤響應,從而允許您的代碼繼續。如果您需要幫助,請顯示您的代碼。

+0

繼續運行剛纔終止的下一條語句。 –

+0

如果將超時設置爲「0」,LWP可能會永久掛在那裏嗎? –

+0

否,0表示不超時。 – ysth

2

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. 
0

有時候,當發送請求並接收響應,然後連接在這個過程中間中斷(Internet連接出現故障),LWP將返回200的$response->code,並且將有一個$response->content等於您請求的內容的部分下載。然後,如果您重試,您將立即得到讀取超時錯誤。

當然,只有在流程的某個特定部分丟失連接時纔會發生這種情況......但這種情況發生了。

我建議您驗證您收到的內容是否完整,如果不是,請在嘗試下一次連接之前先解決該問題。