2009-12-20 174 views
8

有誰知道爲什麼php5下的cURL可能會很慢,即使在45秒超時時也會失敗,在一個speedO'light服務器上下載幾個kb文件?cURL真的很慢

的代碼是在這裏的要求(雖然我調升超時更主要的腳本不執行過程中失敗,並從最初的Chrome改變用戶代理設置爲Mozilla/4.0):

$ch = curl_init('http://www.somesite.com/' . $key); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_REFERER, 'http://www.somesite.com/somereferer/'); 
// curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.39 Safari/530.5'); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0'); 
curl_setopt($ch, CURLOPT_TIMEOUT, 120); 
curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 600); 
+2

發佈您的代碼或代碼 – dusoft 2009-12-20 21:51:38

+0

你好的那部分,歡迎到現場。你使用HTTP 1.1還是1.0? – 2009-12-20 22:15:13

+0

好的,這裏的代碼和@Alix Axel,據我所知cURL默認發送HTTP 1.1請求,我沒有改變 – mangefort 2009-12-21 01:29:00

回答

7

嗯,可能是一個幾件事情,也許有些冗長的輸出將具有某種

curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
curl_setopt($ch, CURLOPT_VERBOSE, true); // some output will go to stderr/error_log 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
$response = curl_exec($ch); 
$errStr = curl_error($ch); 
$errNum = curl_errno($ch); 
$head = curl_getinfo($ch, CURLINFO_HEADER_OUT); 
$ci = curl_getinfo($ch); 
print_r(array($head, $errStr, $errNum, $ci)); 

有時用戶代理將更改站點如何響應,可能需要做的錯誤是這樣的:

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.001 (windows; U; NT4.0; en-US; rv:1.0) Gecko/25250101'); 
+0

謝謝,我也會嘗試。 – mangefort 2009-12-21 01:45:39

+0

該用戶代理提示 - 堅實的東西 – Mojowen 2013-09-26 13:15:51

2

當我設置CONNECTtimeout時,我得到更快的響應。 包含該選項:

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,1)