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'。
我使用的是最新版本的 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'。