在很多时候,我们尽管做了超时设置,但任然是无济于事的,后面上网查了很多文章,大致有了解决方案,但是造成这个问题的原因还是不太清楚的迷,下面就简单说一下我遇到的DNS解析超时问题:
刚开始只设置了请求超时`CURLOPT_TIMEOUT`选项,时间为3秒,如下:
curl_setopt($curl, CURLOPT_TIMEOUT, 3); // 设置超时限制防止死循环
发现curl执行时间是12秒多,又追加了连接超时`CURLOPT_CONNECTTIMEOUT`为2秒,如下:
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2); // 设置连接超时限制防止死循环
然鹅,并没有卵用,curl执行时间仍然是12秒,且报同样的curl_error [Resolving timed out after 3511 milliseconds]
因为本人比较执着,终于找到了有用的文章,试着根据里边讲到的去指定DNS解析规范为IPV4,问题完美解决掉了,最终设置如下:
curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );// 解决DNS解析不受超时设置控制 curl_setopt($curl, CURLOPT_TIMEOUT, 3); // 设置超时限制防止死循环 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2); // 设置连接超时限制防止死循环
很感激这位博主的聪明才智,我仅是一位搬运工,为了更多遇到相同问题的人能准确地定位问题,并解决掉问题。
参考文章:https://phpjieshuo.com/archives/124/
PS:如果有大神知道造成这个问题的原因,并给予回复的话,感恩