【问题标题】:cURL really slowcURL 真的很慢
【发布时间】:2010-12-28 13:47:47
【问题描述】:

有谁知道为什么 php5 下的 cURL 会在 45 秒超时的情况下如此缓慢地失败,在 speedO'light 服务器上下载几 kb 的文件?

代码按要求在此处(尽管我进一步提高了超时时间以使脚本在执行期间不会失败,并将用户代理从初始 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);

【问题讨论】:

  • 发布您的代码或代码中的那部分
  • 您好,欢迎来到本站。您使用的是 HTTP 1.1 还是 1.0?
  • 好的,这是代码,@Alix Axel,据我所知,cURL 默认发送 HTTP 1.1 请求,我没有更改

标签: php performance curl timeout


【解决方案1】:

嗯,可能是一些事情,也许一些冗长的输出会有某种错误

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');

【讨论】:

  • 那个用户代理提示 - 可靠的东西
【解决方案2】:

当我设置 CONNECTtimeout 时,我会得到更快的响应。 包括这个选项:

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-10
    • 2013-01-25
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多