【问题标题】:PHP - DENIC whois query with cURL doesn't work wellPHP - 使用 cURL 的 DENIC whois 查询效果不佳
【发布时间】:2012-04-27 17:43:52
【问题描述】:

当我使用 fsockopen 检查 .de-domain 的可用性时,它始终会提供结果,但是当使用 cURL 执行相同操作时,大约 75% 的查询会失败。 curl_errno 然后提供错误代码 56 (CURLE_RECV_ERROR)。 当我尝试使用 whois.crsnic.net 检查 .com-domain 时,cURL 每次都可以正常工作。只有 whois.denic.de 会惹麻烦。

代码如下:

$domain = "google.de";
$whois_server = "whois.denic.de";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $whois_server.":43"); // Whois Server
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $domain."\r\n"); // Query
$whois = curl_exec ($ch);  

echo "RESULT: ".$whois;
echo "<br/>";
echo curl_errno ($ch);
echo "<br/>";

这是 fsockopen 查询:

fsockopen($whois_server,43, $errno, $error, 5);

有谁知道可能出了什么问题?谢谢!

【问题讨论】:

  • DENIC 建立了一些反僵尸过滤器。因此,为了处理许多请求,您必须使用 API。
  • 不要使用 HTTP 库来执行 whois 查询。您只需要在端口 43 上打开一个 TCP 套接字。

标签: php curl whois


【解决方案1】:

whois.denic.de 要求在您的请求之前添加 -T dn

例如:

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "-T dn $domain\r\n"); // Query

【讨论】:

    【解决方案2】:

    你是linux还是windows?如果在 linux 中只执行:

    system('whois google.de');
    

    【讨论】:

    • 这是最糟糕的建议。不要为了运行 whois 客户端而从程序中逃到 shell。您在 PHP 中有特定的库来执行 whois 查询,或者在它的底部打开一个 TCP 套接字到端口 43。
    猜你喜欢
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    相关资源
    最近更新 更多