You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows控制台运行PHP用Guzzle请求报ConnectException连接被拒绝如何解决

问题触发原因
  • 代理配置不统一:Chrome浏览器通常会继承系统代理或者单独配置了代理规则,而Windows控制台运行的PHP进程默认不会读取浏览器的代理配置,直连请求被目标站点拒绝
  • HTTPS证书校验失败:Windows官方发布的PHP压缩包默认没有内置根CA证书,Guzzle发起HTTPS请求时无法校验服务端证书合法性,会主动中断连接
  • 反爬策略拦截:Guzzle默认的请求头User-Agent特征明显,很容易被站点的反爬规则识别拦截,Chrome的浏览器标识则会被正常放行
  • 本地安全规则限制:Windows防火墙或第三方安全软件可能对php.exe的出站网络请求做了限制,仅放行浏览器的网络请求
修复方案

临时快速验证方案

修改Guzzle初始化配置,加入代理、UA模拟、临时关闭证书校验的参数,代码如下:

$httpClient = new \GuzzleHttp\Client([
    // 如不需要代理可删除该行,否则替换为你自己的代理地址
    'proxy' => 'http://127.0.0.1:你的代理端口',
    // 临时关闭证书校验,仅测试用,生产环境不推荐
    'verify' => false,
    // 模拟Chrome浏览器的User-Agent
    'headers' => [
        'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
    ]
]);
$response = $httpClient->get("https://example.com");
$htmlString = (string) $response->getBody();

生产环境规范修复方案

  1. 配置PHP全局根证书
    • 下载官方cacert.pem根证书文件,放到PHP解压目录下的extras/ssl文件夹中
    • 打开PHP解压目录中的php.ini文件(如果没有就复制php.ini-development改名为php.ini)
    • 找到curl.cainfo和openssl.cafile两个配置项,去掉前面的分号注释,修改为证书的绝对路径,示例:
    curl.cainfo = "C:\php-7.4.23-nts-Win32-vc15-x64\extras\ssl\cacert.pem"
    openssl.cafile = "C:\php-7.4.23-nts-Win32-vc15-x64\extras\ssl\cacert.pem"
    
    • 保存配置后,后续Guzzle请求不需要再设置verify=false即可正常校验HTTPS证书
  2. 检查本地防火墙规则:打开Windows Defender防火墙的出站规则配置,确认php.exe的出站请求被允许,没有被安全软件拦截

内容的提问来源于stack exchange,提问作者Mathis Hüttl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:15:01