2012-03-29 741 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,可信!

相關問題