【问题标题】:error: couldn't connect to host via CURL on same domain错误:无法通过同一域上的 CURL 连接到主机
【发布时间】:2014-08-21 07:34:05
【问题描述】:

我有一个网址 - http://www.xxx.xxx.xxx/

这个网址,我可以通过浏览器打开。我什至可以从我的机器上通过 cURL 调用这个 URL,但是当我从同一服务器和域上的代码调用它时,它给了我一个错误 - error: couldn't connect to host

以下是我的代码 -

function get_xml_via_curl($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    echo $url;
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    /*curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);*/
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    $returned = curl_exec($ch);
    if(curl_errno($ch)) {
        echo 'error: ' . curl_error($ch);
    }
    curl_close($ch);
    // $xml === False on failure
    $xml = simplexml_load_string($returned);
    return $xml;
}

就像我说的,在 localhost 上这行得通。我可以直接通过浏览器打开网址。但是当我在同一台服务器上部署代码并尝试通过 cURL 调用时,它给了我一个错误 - error: couldn't connect to host

更新代码 -

我将服务器上的代码修改为 -

function get_xml_via_curl($url) {
    $url = " http://www.xxx.xxx.xxx.xxx/";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    $returned = curl_exec($ch);
    if(curl_errno($ch)) {
        echo 'error: ' . curl_error($ch);
    }
    curl_close($ch);
    $xml = simplexml_load_string($returned);
    return $xml;
}

并且从 curl 的错误变为跟随 -

error: Protocol http not supported or disabled in libcurl

【问题讨论】:

标签: php apache curl


【解决方案1】:

由于$url = " http... 中 http 之前的空格,您更新的代码无法正常工作

由于某些防火墙或名称服务器问题,原始代码可能无法正常工作。尝试在同一服务器上的浏览器中直接访问要加载的 URL。那也可能会失败。

您需要修复服务器以接受来自本地主机的请求。

还可以帮助您检查 Web 服务器和防火墙日志文件。查看请求被拒绝的原因。甚至暂时只是禁用防火墙以排除它。

【讨论】:

  • 对不起,我花了这么长时间,但这就是问题所在。
【解决方案2】:

我也遇到过同样的问题,PHP curl 由于相同的域而抛出“连接超时错误”并尝试了所有其他选项,但没有任何结果。

最后我得到了答案并修复了它。只需运行以下命令(ubuntu)

# sudo ifconfig lo up

对于 Cent 操作系统:

# sudo ip link set lo up
# sudo ip addr show

“lo”是环回接口。这是系统用来与自身通信的特殊网络接口。

【讨论】:

    【解决方案3】:

    尝试:

    $url="//your url";
    echo get_xml_via_curl($url);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 2011-04-07
      相关资源
      最近更新 更多