2017-10-10 136 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