2012-03-29 150 views
47

我使用cUrl(php)将项目代码以xml格式发送到Web服务。我得到了本地主机的正确反应,但是当这样做服务器它显示如何解决cURL错误(7):无法连接到主机?

卷曲错误(7):无法连接到主机

这里是我的代码:

function xml_post($post_xml, $url) 
    { 
     $user_agent = $_SERVER['HTTP_USER_AGENT']; 

     $ch = curl_init(); // initialize curl handle 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_FAILONERROR, 1);   
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  
     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 50); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $post_xml); 
     curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); 
    // curl_setopt($ch, CURLOPT_PORT, $port);   

     $data = curl_exec($ch); 
     $curl_errno = curl_errno($ch); 
     $curl_error = curl_error($ch); 
     if ($curl_errno > 0) { 
       echo "cURL Error ($curl_errno): $curl_error\n"; 
     } else { 
       echo "Data received\n"; 
     } 
     curl_close($ch); 

    echo $data; 
} 

我将物品代码发送到Tally并从中获取详细信息。我尝试使用版本php 4+和php5 +,没有任何解决方案。

+0

选择使用端口80 – 2013-11-13 14:46:26

+0

使用卷曲详细选项,以获得更多的信息 – Preexo 2014-01-31 17:39:57

+0

我将在这里补充两点,最终得到了我的问题解决了代理: 1.运行卷曲在命令行中使用'--verbose ' 2.如果你在使用Little Snitch(或类似的)的OSX上,看看那个。 – 2016-07-19 21:48:43

回答

2

您是否可以通过浏览器或PHP脚本访问该URL?显示的错误是您无法连接。所以首先确认URL是可访问的。

+3

是的。从本地主机我可以访问它。我把它钉在浏览器中,它会弹出。 – Raj 2012-03-29 09:53:02

41

卷曲的错误代码7(CURLE_COULDNT_CONNECT)

是很明确的...这意味着Failed to connect() to host or proxy.

下面的代码将在任何系统上运行:

$ch = curl_init("http://google.com"); // initialize curl handle 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    $data = curl_exec($ch); 
    print($data); 

如果您不能看到谷歌页面然后.. your URL is wrong或者你有一些firewallrestriction问题。

+0

我可以看到谷歌页面。但是,然后我使用它在localhost相同的网址,它在那里工作正常。 – Raj 2012-03-29 10:13:58

+0

它的你的URL ...你能给我一个样本的URL让我为你测试 – Baba 2012-03-29 10:58:57

+0

我不明白你在问什么。 – Raj 2012-03-29 11:22:00

1

检查端口80和443是否被阻塞。或输入 - IP graph.facebook.com并将其输入到etc/hosts文件中

14

“CURL ERROR 7无法连接到Permission denied”错误是由于某些原因导致curl请求被某些防火墙或类似事件阻止。

当curl请求不符合标准端口时,您将面临此问题。

例如,如果您确实卷曲了某个位于端口1234的URL,您将面临此问题,因为具有端口80的URL会轻松为您提供结果。

最常见的错误是在CentOS和任何其他使用'SElinux'的操作系统上看到的。

您需要取消或更改“SELinux的”再到允许

对此有一个

http://www.akashif.co.uk/php/curl-error-7-failed-to-connect-to-permission-denied

希望看看这有助于

+0

但是如何mac系统 – MeganZhou 2014-05-12 11:07:13

+3

禁用SELinux是矫枉过正,并会对其他领域的安全性产生负面影响。您可以通过从终端更改该特定选项来显式允许其他端口:setsebool -P – 2014-10-27 23:06:46

+0

上的httpd_can_network_connect是否有一个标准端口列表,对此,curl不会引发此错误? – 2016-07-07 15:54:39

-1

,你也可以得到这样的,如果你是试图在多个HTTP请求同时访问相同的URL。许多卷曲请求将无法连接,因此返回错误

1

当在远程设备上未配置对curl的调用时,也可能导致此问题。在这些情况下调用http可以解决这个问题,至少在你配置远程的ssl之前。

1

在我的情况下,我有类似cURL Error (7): ... Operation Timed Out。我正在使用我工作的公司的网络连接。我需要创建一些环境变量。接下来的工作对我来说:

在Linux终端:

$ export https_proxy=yourProxy:80 
$ export http_proxy=yourProxy:80 

在windows我创建的窗口的方式(下同)环境变量。

我希望它有帮助!

问候!

+0

是你的代理 - 127.0.0.1 – 2017-09-14 10:10:13

2

在PHP中,如果你的网络在代理之下。你应该设置代理网址和端口

curl_setopt($ch, CURLOPT_PROXY, "http://url.com"); //your proxy url 
curl_setopt($ch, CURLOPT_PROXYPORT, "80"); // your proxy port number 

这是解决我的问题

1

对我来说,这个问题是由托管服务提供商造成的,我使用的是阻塞的HTTP数据包发往源自他们的IP块在他们的IP块内。取消frickin,可信!

相关问题