2009-12-20 97 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)