【发布时间】:2017-01-12 21:16:38
【问题描述】:
我正在使用 PHP curl_multi() 来抓取网站。由于此处概述的 Libcurl 中的同步 DNS 问题 (https://stackoverflow.com/a/2315290/4391251),整个批处理的处理中断时出现“Curl 错误:6:无法解析主机名:名称查找超时”的 URL 未能及时解析其 DNS。不幸的是,我无法使用 c-ares 编译 Libcurl 以使 DNS 请求变为异步。
还有其他已知的解决方案可以解决这个问题吗?也许我可以使用一些奇怪的 PHP 超时来防止一个超时的 DNS 解析导致以下所有 DNS 请求也超时?
如果没有,那么我如何伪造/模拟无法解析其 DNS 的 URL?现在我只是一次运行大量 URL,希望其中一个无法解析,以便我可以测试解决方案,由于 DNS 缓存,这显然/显然不能很好地工作。
CURLOPT_CONNECTTIMEOUT、CURLOPT_DNS_CACHE_TIMEOUT 或 CURLOPT_IPRESOLVE 等设置能否帮助解决/最小化此问题?到目前为止,这些似乎都对我没有任何影响。
提前致谢!
【问题讨论】:
-
您可以在抓取之前将网站添加到 hosts 文件中,然后它应该会在毫秒或更短的时间内解决,太快而不会导致超时 -- en.wikipedia.org/wiki/Hosts_(file)#Location_in_the_file_system