gpt4 book ai didi

PHP 的 cURL 突然无法获取 IP 地址,file_get_contents 是一个很好的替代品吗?

转载 作者:搜寻专家 更新时间:2023-10-31 21:14:53 25 4
gpt4 key购买 nike

我们网站上有一个页面使用 cURL 从远程域获取 XML 数据。几天前它随机开始失败(可能有 1/3 的请求失败)。在与我们的主机和远程站点的运算符(operator)调试后,我们发现 curl 错误是“名称查找超时”,表明 DNS 问题。我们的 CURLOPT_CONNECTTIMEOUT 设置为 5。当我将其更改为 30 时,它每次都有效。

但这是一个实时页面,我不能让访问者在等待响应时等待 30 秒。另外,增加的超时并不能回答为什么这首先开始失败的问题。该系统已存在多年,5 秒超时一直没问题。

此外,我发现如果我执行 dns_get_record(),它每次都能正常工作,而且我很快就能获得一个有效的 IP 地址。所以我修改了脚本,首先执行 dns_get_record(),然后我 cURL 到它返回的 IP,这绕过了 cURL 端的名称查找。它工作正常,但很愚蠢。

第一个问题,有人对 cURL 失败的方式或原因有任何建议吗?我们的主机和远程站点的主机都同意它是某个地方的 DNS 服务器,但都没有同意谁的 DNS 服务器负责,因为他们都说他们自己的服务器很好,而我们的主机说他们可以毫无问题地 ping 远程域。

第二个问题,file_get_contents() 是否足以替代 dns_get_record() + cURL?还是我应该坚持使用 dns_get_record() + cURL?

最佳答案

在底层,curl_execfile_get_contents 执行几乎相同的操作;他们都使用 libresolv 来:

  1. 连接到名称服务器
  2. 发出 DNS 请求
  3. 处理 DNS 响应

要进一步调试它,您可以使用 curl_getinfo()获取有关您的请求的详细统计信息;您可以使用它来了解每个部分使用了多长时间:

  • CURLINFO_NAMELOOKUP_TIME
  • CURLINFO_CONNECT_TIME
  • CURLINFO_PRETRANSFER_TIME
  • ...

关于PHP 的 cURL 突然无法获取 IP 地址,file_get_contents 是一个很好的替代品吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11139215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com