PHP Guzzle 5:无法处理带有PORT编号的URL

时间:2015-03-12 18:26:25

标签: php url curl port guzzle

我正在使用最新版本的guzzle。

(from composer.json)
"guzzlehttp/guzzle": "~5" 

(from composer.lock)
"name": "guzzlehttp/guzzle",
"version": "5.2.0",

当我尝试使用包含PORT编号的URL请求(GET或POST)时:

$response = $client->get('http://www.hostdnshere.com:8888', array());

我收到以下错误:

string(68) "cURL error 7: Failed to connect to 000.000.000.000: Permission denied"

当我这样做但省略了PORT:

$response = $client->get('http://www.hostdnshere.com', array());

请求成功没有问题。我搜索了文档并用Google搜索了网页,但无法找到如何为主机设置端口,因为它无法包含。

此外,我已经在服务器表单上使用cURL测试了所有请求正在发送,无论有没有PORT,无论如何都像魅力一样,所以我知道它不是服务器,DNS,代理的问题或者PORTS。

1 个答案:

答案 0 :(得分:1)

所有那些因为

而撞到墙上的人
"cURL error 7: Failed to connect to 000.000.000.000: Permission denied"

错误,这一切都归结为'SELINUX'。这是正确的,任何编程语言编写的任何cURL包装都会受到以下事实的影响:当'SELINUX'设置为'强制'时,cURL对其中包含非标准PORT的URL执行会产生问题(即my.domain.com:8888)。

建议仅限本地开发,如果您希望在URL中使用非标准PORTS,则将“SELINUX”设置为“已禁用”。生产中的正确解决方案是使用没有PORT的干净URL,以便启用“SELINUX”。

打开:

nano /etc/selinux/config

找到:

SELINUX=enforcing

更改:

SELINUX=disabled

使用CentOS的人很可能会遇到这个问题,因为默认情况下'SELINUX'设置为'强制执行'。