我有一个网址 - 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
答案 0 :(得分:2)
由于$url = " 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);