代码之家  ›  专栏  ›  技术社区  ›  Schleichermann

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

  •  4
  • Schleichermann  · 技术社区  · 9 年前

    我正在使用最新版本的狂饮。

    (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"
    

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

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

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

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

    1 回复  |  直到 9 年前
        1
  •  3
  •   Schleichermann    9 年前

    对于那些因为

    "cURL error 7: Failed to connect to 000.000.000.000: Permission denied"
    

    错误,全部归结为“SELINUX”。没错,用任何编程语言编写的任何cURL包装器都会受到以下事实的影响:当“SELINUX”设置为“强制执行”时,针对具有非标准端口的URL(即my.domain.com:8888)执行cURL会产生问题。

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

    打开:

    nano /etc/selinux/config
    

    定位:

    SELINUX=enforcing
    

    更改:

    SELINUX=disabled
    

    由于默认情况下“SELINUX”设置为“强制执行”,使用CentOS的用户很可能会遇到此问题。