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
相关产品推荐
相关产品推荐

