当curl尝试解析主机时,如何更改php curl超时(curl err_no 6)

时间:2010-11-19 14:36:10

标签: php curl timeout dns

我正在对页面执行curl请求。我已经设置了'CURLOPT_TIMEOUT'(到6秒)和'CURLOPT_CONNECTTIMEOUT'(到4秒) - 两者都适用于大多数URL。

然而,当一个网页没有响应时(最终导致CURL通过'无法解决主机'错误(err_no 6)) - 似乎'CURLOPT_TIMEOUT'没有效果,卷曲将等待,可能是无限期或直到一些“其他”超时到期。

使用我尝试访问的URL,CURL在返回之前似乎总是需要15秒(这与'CURLOPT_TIMEOUT'或'CURLOPT_CONNECTTIMEOUT'无关。

有人可以告诉我如何限制CURL花费在尝试解析主机上的时间吗?

3 个答案:

答案 0 :(得分:3)

那么你手上有3次超时。

  1. CURLOPT_TIMEOUT - 多久了 整个行动正在进行中
  2. CURLOPT_CONNECTTIMEOUT - 多久 cURL等待主持人回复 提出要求
  3. DNS查找超时 - 您正在经历的DNS,DNS 查询失败并需要一段时间 这样做
  4. PHP中的cURL没有设置此超时的默认方法,我建议使用另一种超时方法解析主机名,然后将IP传递给cURL。

答案 1 :(得分:2)

在使用cURL之前更改dns解决超时

putenv('RES_OPTIONS=retrans:1 retry:1 timeout:1 attempts:1');

答案 2 :(得分:0)

实际上,CURLOPT_CONNECTTIMEOUT包含dns查询时间。在php 5.4.9中测试。