2017-10-10 19 views
0

當嘗試使用php cURL庫在端口4321上向localhost發出cURL請求時,我得到了一個權限被拒絕的錯誤。這對希望對某人而言非常容易或明顯誰之前遇到過這個問題。php cURL到localhost返回在開放端口上被拒絕的權限

我能夠從局域網上的另一個系統向生產服務器發出相同的cURL請求。例如,如果在局域網上的另一個系統上,我使用以下功能發出請求,其中$host='http://192.168.1.100:4321'然後一切正常。如果我的系統本身,其中$host='http://localhost:4321'$host='http://127.0.0.1:4321'$host='::1:4321'然後我得到「權限被拒絕」

我寫了我的要求很簡單函數的捲曲的錯誤上運行是:

function makeRequest($host,$data){ 
    $ch = curl_init(); 
    curl_setopt($ch,CURLOPT_URL, $host); 
    curl_setopt($ch,CURLOPT_POSTFIELDS, $data); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    $result = json_decode(curl_exec($ch),true); 
    if(!empty(curl_error($ch))){ 
     $result = print_r(curl_error($ch).' - '.$host); 
    } 
    curl_close($ch); 
    return $result; 
} 

該系統是一個centos 7服務器。運行firewall-cmd --list-all顯示了我的開放端口

ports: 443/tcp 80/tcp 4321/tcp

如果你有一些想法,或者需要我來檢查的設置不要猶豫,問。

編輯 hosts文件看起來像

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 

EDIT2

當我使用命令行卷曲對同一端口萬物甦醒下車。

/]$ curl -v localhost:4321 
* About to connect() to localhost port 4321 (#0) 
* Trying ::1... 
* Connected to localhost (::1) port 4321 (#0) 
> GET/HTTP/1.1 
> User-Agent: curl/7.29.0 
> Host: localhost:4321 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< Accept-Ranges: bytes 
< Cache-Control: no-cache, no-store, must-revalidate 
< Content-Length: 774.... 
+0

有幾個建議是1)檢查你的'hosts'文件,看看'localhost'是否映射到'127.0.0.1',如果沒有,添加這個條目,以及2)從'curl'運行命令行使用'-v'開關檢查完整輸出並獲得更好的洞察力。如果您在命令行上運行curl,請考慮在此處傾銷輸出,以便我們可以看到發生了什麼。 –

+0

注意到你的第一個(成功的)嘗試在它前面有'http://',而失敗的沒有。這是一個錯字嗎? cURL需要在http(s)上運行 – apokryfos

+0

這是一種錯字。我先用'http://'嘗試,然後再用它。 –

回答

2

我找到了答案,這個問題在: Getting permission denied while Posting xml using Curl?

問題是SELinux和解決的辦法是運行

[email protected] /]$ sudo setsebool httpd_can_network_connect=1

它沒有任何意義,我認爲我可以使用php cURL庫來訪問世界上的其他所有網站,但不能在另一個端口上訪問本地主機,而我可以通過命令行cURL訪問本地主機。

+0

使用此'user @ host /] $ sudo setsebool httpd_can_network_connect 1'從上面的語法中刪除'='。這對我有用。 – jems