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

GitHub Actions中Codeception+Mailcatcher测试遇HTTP/1不支持错误

解决Codeception MailCatcher模块执行resetEmails()时的HTTP/1不支持错误

问题场景

在GitHub Actions环境中使用Codeception搭配Mailcatcher做测试,未修改任何配置的情况下,执行$I->resetEmails();突然抛出错误:

[GuzzleHttp\Exception\ConnectException] HTTP/1 is not supported by the cURL handler.  

当前使用的Mailcatcher安装脚本与Codeception配置如下:
安装脚本:

- name: Install & run mailcatcher
  run: |
    sudo gem install mailcatcher --no-update-sources --no-document
    mailcatcher

acceptance.suite.yml配置:

modules:
  enabled:
    - Asserts
    - Helper\Acceptance
    - DbHelper
    - Filesystem
    - MailCatcher
  config:
    MailCatcher:
      url: "http://127.0.0.1"
      port: "1080"
      guzzleRequestOptions:
        verify: false
        debug: false
        version: 1.0

解决方法

1. 修正Guzzle的HTTP版本参数名

Guzzle 6及以上版本中,指定HTTP版本的正确参数是http_version,而非配置里的version。修改acceptance.suite.yml的MailCatcher配置:

modules:
  config:
    MailCatcher:
      guzzleRequestOptions:
        verify: false
        debug: false
        http_version: 1.0  # 替换原有的version字段

参数名错误会导致Guzzle无法正确强制使用HTTP/1.x协议,在GitHub Actions环境的cURL默认启用HTTP/2时触发兼容性错误。

2. 指定安装稳定版Mailcatcher

若最新版Mailcatcher与当前GitHub Actions环境存在兼容性问题,可锁定安装稳定版本(如0.8.2),同时确保Mailcatcher监听所有网络接口:

- name: Install & run mailcatcher
  run: |
    sudo gem install mailcatcher -v 0.8.2 --no-update-sources --no-document
    mailcatcher --ip 0.0.0.0

添加--ip 0.0.0.0可避免容器环境中仅监听localhost导致的访问问题。

3. 直接强制cURL使用HTTP/1.1

如果前两种方法无效,可通过Guzzle的curl选项直接设置cURL参数,强制指定HTTP版本:

modules:
  config:
    MailCatcher:
      guzzleRequestOptions:
        verify: false
        debug: false
        http_version: 1.0
        curl:
          CURLOPT_HTTP_VERSION: CURL_HTTP_VERSION_1_1

内容的提问来源于stack exchange,提问作者maidan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:54:52