PHP Guzzle 5:无法处理其中包含端口号的 URL

PHP Guzzle 5: Cannot handle URL with PORT number in it

我使用的是最新版本的 guzzle。

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

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

当我尝试使用包含端口号的 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"

当我执行相同操作但省略端口时:

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

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

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

致所有因

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

错误,归结为'SELINUX'。没错,任何用任何编程语言编写的 cURL 包装器都会受到以下事实的影响,即当 'SELINUX' 设置为 'enforcing' 时,它会在执行 cURL 时出现问题针对其中具有非标准端口的 URL(即 my.domain.com:8888)。

如果您想在 URL 中使用非标准端口,建议仅用于本地开发,将 'SELINUX' 设置为 'disabled'。生产中的正确解决方案是使用干净的 URLs,其中不带 PORT,以便保持 'SELINUX' 启用。

打开:

nano /etc/selinux/config

找到:

SELINUX=enforcing

变化:

SELINUX=disabled

使用 CentOS 的用户很可能会 运行 遇到这个问题,因为 'SELINUX' 默认设置为 'enforcing'。