【问题标题】:Curl PHP fake error 6: name lookup timed outcurl PHP fake 错误 6:名称查找超时
【发布时间】: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 请求变为异步。

  1. 还有其他已知的解决方案可以解决这个问题吗?也许我可以使用一些奇怪的 PHP 超时来防止一个超时的 DNS 解析导致以下所有 DNS 请求也超时?

  2. 如果没有,那么我如何伪造/模拟无法解析其 DNS 的 URL?现在我只是一次运行大量 URL,希望其中一个无法解析,以便我可以测试解决方案,由于 DNS 缓存,这显然/显然不能很好地工作。

  3. CURLOPT_CONNECTTIMEOUT、CURLOPT_DNS_CACHE_TIMEOUT 或 CURLOPT_IPRESOLVE 等设置能否帮助解决/最小化此问题?到目前为止,这些似乎都对我没有任何影响。

提前致谢!

【问题讨论】:

标签: php curl dns


【解决方案1】:

首先,您链接到的旧答案只是部分正确。 (我是 libcurl 的主要作者,我们在这里讨论的大部分代码都是我编写的。)

其次,Linux 发行版和 Windows 中的大多数 libcurl 都是使用线程解析器构建的,它可以很好地处理异步名称解析。

但要回答实际问题:您可以通过不使用主机名来避免完全解析 DNS。直接使用 IP 地址。您可以使用CURLOPT_RESOLVE 为您要使用的主机名提供这些IP 地​​址。它看起来不太好,但应该可以。

【讨论】:

  • 你确定它的 CURLOPT_IPRESOLVE 吗?也许你的意思是 CURLOPT_CONNECT_TO ?
  • 在mac上我也有这个问题.. mac没有线程解析器吗?
  • @Wesley:如果你以这种方式构建它肯定可以(Apple 发布的版本)
猜你喜欢
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
相关资源
最近更新 更多