错误:无法通过相同域上的CURL连接到主机

时间:2014-08-21 07:34:05

标签: php apache curl

我有一个网址 - 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上这是有效的。我可以通过浏览器直接打开URL。但是当我在同一台服务器上部署代码并尝试通过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

3 个答案:

答案 0 :(得分:2)

由于$url = " http...

中http之前的空格,您的更新代码无效

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

您需要修复服务器以接受来自localhost的请求。

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

答案 1 :(得分:1)

我曾经遇到过同样的问题,因为相同的域,PHP curl抛出“连接超时错误”,并尝试了所有其他选项,但没有解决。

最后我得到了答案并解决了。只需在命令(ubuntu)下运行

# sudo ifconfig lo up

对于Cent OS:

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

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

答案 2 :(得分:0)

尝试:

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