【问题标题】:curl namelookup_time of 10 secondscurl namelookup_time 为 10 秒
【发布时间】:2014-09-05 17:54:58
【问题描述】:

在 PHP 中对纯文本网页 (http://whatismyip.org/) 执行基本 curl 请求时,响应时间超过 10 秒。

查看 curl 的信息后告诉我 namelookup_time 是 10 秒。从命令行(终端)执行 curl 时,我可以看到完全相同的结果。

为什么名称查找需要这么长时间,根据我的阅读,这很可能与托管 PHP 文件的服务器/我的计算机有关。


这是我的代码:

$ch = curl_init();  
curl_setopt( $ch, CURLOPT_URL, "whatismyip.org");
curl_exec( $ch );

$ci = curl_getinfo($ch);
print_r($ci);

这是信息:

[url] => HTTP://whatismyip.org 
[content_type] => text/plain 
[http_code] => 200 
[header_size] => 45 
[request_size] => 53 
[filetime] => -1 
[ssl_verify_result] => 0 
[redirect_count] => 0 
[total_time] => 10.549943 
[namelookup_time] => 10.100938 
[connect_time] => 10.300077 
[pretransfer_time] => 10.300079 
[size_upload] => 0 
[size_download] => 14 
[speed_download] => 1 
[speed_upload] => 0 
[download_content_length] => -1 
[upload_content_length] => 0 
[starttransfer_time] => 10.549919 
[redirect_time] => 0 
[certinfo] => Array ( )

【问题讨论】:

    标签: php curl


    【解决方案1】:
    curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
    

    为我解决了这个问题。 IPV6 有一个不为人知的错误。

    【讨论】:

    • 这在 OSX 上的本地 Ubuntu vagrant box 上对我有用。我不确定为什么。您如何确定这是 IPV6 问题?
    • 我收到了 DNS 错误,然后我尝试更改一些参数。
    • 在共享 PHP 托管服务上也为我工作。这让我发疯了!
    【解决方案2】:

    我无法完全使用上面的代码重复此操作 - 我的 (Windows) 机器上的 namelookup_time 返回为 0total_time 为 ~0.5namelookup_time 是操作系统解析 whatismyip.org 的 DNS 名称所花费的时间,因此您需要检查服务器的 DNS 配置。

    猜测一下,您配置的主 DNS 服务器不存在/不起作用,超时时间为 10 秒。这意味着操作系统将等待 10 秒以尝试联系主 DNS,然后在超时时转到辅助 DNS,这可以正常工作。

    您配置的 DNS 服务器是什么?如果需要,请尝试使用 8.8.8.8 (Google) 作为您的主 DNS。

    附带说明,最好为 cURL 提供 完整 URL,因此请使用 http://whatismyip.org/ 而不仅仅是 whatismyip.org - 尽管这似乎不是导致此特定问题的原因问题。

    【讨论】:

    • 目前我的 DNS 服务器在查看 System Preferences>Network>Advanced>DNS 时是 192.168.1.1
    • 刚刚将其更改为 Google 的 8.8.8.8,现在它就像一个魅力一样,非常感谢!
    【解决方案3】:

    您的一台 DNS 服务器可能没有及时回复。对 /etc/resolv.conf 中列出的所有 IP 尝试此命令:

    dig @IP.TO.DNS.SERVER google.com
    

    如果我是正确的,您的一台 DNS 服务器没有响应。

    【讨论】:

    • 我现在看到您使用的是 OSX,并且您指定了自己的 DNS 设置。可能您的上游路由器(为您进行 DNS 查找)有错误的 DNS 配置。
    • 实际上192.168.1.1 是默认设置,但就像您说的那样,它的响应速度不够快。正如 DaveRandom 所说,将其更改为 8.8.8.8 似乎已经解决了这个问题。 +1
    • 太棒了。如果您的默认 DNS 服务器 (192.168.1.1) 需要超过 10 秒的时间才能回复,则说明那里有问题,或者进一步“上游”:-)。
    猜你喜欢
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多