2011-01-12 118 views
2

問候大家捲曲超時和連接超時的最佳值

我正在研究一個小爬行引擎,並使用curl從各個網站請求頁面。問題是什麼建議我應該設置我的connection_timeout和超時值?我通常會抓取的東西是包含大量圖像和文本的頁面。

+0

你應該接受一些你的問題的答案與複選標記。 – zerkms 2011-01-12 03:31:36

+0

如果你想抓取,你應該設置爲無超時,而不是一次性產生curl(順序),你應該分叉多個進程捲曲 – ajreal 2011-01-12 04:07:44

回答

9

cURL知道兩個不同的超時。
對於CURLOPT_CONNECTTIMEOUT,無論網站包含多少文本或其引用的圖像有多少其他資源都不重要,因爲這是連接超時,甚至服務器在連接建立之前無法知道所請求頁面的大小。
對於CURLOPT_TIMEOUT它確實很重要。即使是大頁面,也只需要少量數據包,但服務器可能需要更多時間來組合輸出。此外,重定向和其他事物(例如代理)的數量可能會顯着增加響應時間。

一般而言,超時的「最佳值」取決於您的網絡和服務器的要求和條件。這些條件是變化的主題。因此沒有「最佳價值」。
我推薦使用較短的超時時間,稍後重試失敗的下載。

Btw cURL不會自動下載響應中引用的資源。您必須手動進行此操作,然後再撥打curl_exec(新鮮超時)。

-1

我用

 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,30); 
curl_setopt($ch, CURLOPT_TIMEOUT,60); 
0

的最好的迴應是瑞克的一個。

我有一個代理檢查器,在我的基準測試中,我看到大多數工作代理需要不到10秒的時間才能連接。

因此,我使用ConnectionTimeOut和TimeOut的時間爲10秒,但在我的情況下,您必須決定要使用多少次,因此請從大值開始,使用curl_getinfo查看時間基準並減少值。

注意:連接超過5秒或10秒的代理對我來說沒用,所以我使用該值。

0

是的。如果您的目標是查詢另一個站點的代理,則這樣的級聯連接將需要相當長的時間來執行curl調用。

特別是當您遇到間歇性捲曲問題時,請首先檢查這些值。

0

如果將其設置得太高,那麼腳本將會很慢,因爲一個停止的URL將會花費您在CURLOPT_TIMEOUT中設置的所有時間來完成處理。如果您不使用代理服務器,那麼你可以只設置下列值

CURLOPT_TIMEOUT = 3 CURLOPT_CONNECTTIMEOUT = 1

然後你可以通過失敗的URL在以後的時間來仔細檢查他們。