我们编写了一个从外部服务器提取数据的脚本。如果服务器出现故障,我们不希望我们的服务器等待数据,因为我们处理了大量数据,而且我们不希望它陷入困境。为了解决这个问题,我们试图超过我们的卷曲调用,如果他们花费超过几百毫秒。
我发现一些文档说CURLOPT_TIMEOUT_MS和CURLOPT_CONNECTTIMEOUT_MS应该在我的php和libcurl版本中可用,但它似乎没有超时,即使我将超时设置为1ms。
$url = "http://www.cnn.com;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER,0); //Change this to a 1 to return headers
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 1);
$data = curl_exec($ch);
curl_close($ch);
有谁知道我们做错了什么或其他方式做到这一点?
答案 0 :(得分:2)
在unresponsive dns server and curl multi timeouts not working中看到了这一点:
“......我们曾经有过一段时间 我们提取信息的网站已经有了 DNS服务器变得反应迟钝。什么时候 这发生在curl中设置的超时 (php绑定)不起作用 预期。它在1分钟后超时14 秒“无法解析主机: www.yahoo.com(未找到域名)“ 为了在测试环境中实现这一点,我们 修改/etc/resolv.conf以获得 名称服务器不存在 (名称服务器1.1.1.1)。没有什么 它们设置在
当我们得不到时,他们不会超时 到DNS服务器。我用curl_multi 因为我有多个来源 我们从中获取信息 时间。下面的例子就是一个 例如简单。作为一个 旁注curl_errno不会返回 错误代码,即使有一个 错误。不知道为什么......“(CURLOPT_CONNECTTIMEOUT, CURLOPT_CONNECTTIMEOUT_MS , CURLOPT_TIMEOUT, CURLOPT_TIMEOUT_MS)