【问题标题】:Why is cURL reporting an invalid IP address as an error?为什么 cURL 将无效 IP 地址报告为错误?
【发布时间】:2010-09-17 23:23:46
【问题描述】:

我有以下使用 cURL 的 PHP 代码:

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,"http://area51.stackexchange.com/users/flair/31.json");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

$a_data = json_decode(curl_exec($ch));

echo curl_error($ch);

然后当我尝试通过 HTTP 访问该页面时出现以下错误:

无法连接到 0.0.0.31:参数无效

但是,从命令行运行代码时可以正常工作。

可能什么会导致 cURL 尝试连接到 AFAIK 的 0.0.0.31,甚至不是有效的 IP 地址?

【问题讨论】:

  • 我假设您已经检查过 DNS 解析是否正常工作。 cURL 在命令行中是否正常工作?
  • @Tim:是的。在同一台服务器的命令行下工作正常。
  • 嗯。很奇怪。请参阅下面的问题/建议。
  • 你在哪里测试你的代码?在上班?也许代理服务器@work 拒绝访问未知主机?否则我猜你的 dns 是错误的(可能被黑了!!)。尝试刷新你的 dns 缓存??
  • 可能是某些东西将 URL 中的 / 字符误解为 . ,将 URL 转换为 0.0.0.31?两者都以31 结尾的事实很奇怪。不过,我以前从未见过这样的事情发生...

标签: php curl dns


【解决方案1】:

“什么可能导致 cURL 尝试连接到 AFAIK 的 0.0.0.31,甚至不是有效的 IP 地址?”

你的 DNS 搞砸了。我测试了你的代码,它可以工作。

【讨论】:

    【解决方案2】:

    当您说“从命令行运行代码可以正常运行”时,您的意思是您使用 PHP CLI 解释器运行它吗?如果是这种情况,您可能会检查 Web 服务器上 php -iphpinfo() 的输出之间是否存在任何明显的不匹配。这可能是一些奇怪的版本不匹配或环境问题,虽然你的猜测和我一样好。

    如果您(正如我最初的想法)只是在谈论运行curl 命令,您也可以尝试在那里检查版本号或环境变量。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。

      我认为您可能所做的是像这样构造 url:

      $url = "http://area51.stackexchange.com/users/flair/" + 31 + ".json";
      

      然后由于某种原因,该 url 被转换为 0.0.0.31。

      而是尝试连接字符串,如下所示:

      $url = "http://area51.stackexchange.com/users/flair/" . 31 . ".json";
      

      至少解决了我的问题!

      【讨论】:

        猜你喜欢
        • 2017-09-16
        • 2012-06-05
        • 2012-05-06
        • 2010-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多