Composer代理环境下重试常失效,因需同时满足:正确配置http-proxy和https-proxy、代理支持CONNECT隧道、错误属重试白名单(如cURL 6/28、5xx)、process-timeout≥600;缺一则静默直连超时卡死。

Composer 本身不实现“断线重连”,它依赖底层 cURL 的重试逻辑,而代理环境下的重试极易失效——配错一个字段或漏掉 HTTPS 隧道配置,就会静默 fallback 到直连,最终超时卡死。
为什么代理环境下重试经常不触发
Composer 对 HTTP 和 HTTPS 请求使用完全独立的代理字段,且重试逻辑只在特定错误码下激活。以下情况会让重试直接跳过:
-
https-proxy未设置,或值写成https://127.0.0.1:8080(必须是http://协议)→ HTTPS 请求走直连,报cURL error 7或Connection refused,不进重试路径 - 代理支持 CONNECT 但返回 407(NTLM 认证)→ Composer 原生不处理 NTLM,直接失败,不重试
-
http-timeout设为 60 秒,而镜像响应耗时 90 秒 → 报A connection timeout was encountered,跳过重试逻辑(该错误属于“操作超时”,不在默认重试范围内) - 设置了
--no-retry-auth-failure,但实际遇到的是 429 Too Many Requests → 误关重试开关,本该重试的场景被跳过
代理重试生效的必要条件
只有同时满足以下全部条件,Composer 才会在代理失败后自动重试(默认最多 3 次):
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 已正确配置
http-proxy和https-proxy(均用composer config -g设置) - 代理服务本身可达且能建立 CONNECT 隧道(可用
curl -x http://127.0.0.1:8080 -I https://packagist.org/packages.json验证) - 错误类型属于重试白名单:如
CURL error 6(DNS 失败)、CURL error 28(连接超时)、5xx 状态码 -
process-timeout足够长(建议 ≥ 600),否则进程级超时先于 HTTP 重试触发
强制让代理失败走重试的实操组合
当代理不稳定、偶发中断时,仅靠默认行为不够,需主动收紧控制:
- 把重试次数提到上限:
composer install --retries=5 - 禁用并行下载,避免代理连接池耗尽:
composer config -g repos.packagist.org.concurrent-downloads 1 - 延长单次请求容忍时间:
composer config -g http-timeout 1200(注意:此值影响CURLOPT_TIMEOUT,不是连接超时) - 若确认是 TLS 握手卡住,强制 IPv4:
CURL_IPRESOLVE=4 composer install - 临时绕过证书校验(仅调试):
composer config -g cafile /dev/null+composer config -g secure-http false
比重试更关键的是代理失效的快速识别
代理问题最麻烦的不是失败,而是“无报错卡住”。真正有效的排查顺序是:
- 运行
composer config -g --list | grep -E "(http|https)-proxy",确认两行都存在且格式正确 - 执行
curl -v -x http://127.0.0.1:8080 https://packagist.org/packages.json 2>&1 | grep -E "(Connected|TLS|HTTP/)",看卡在哪一环 - 检查
composer clear-cache后是否仍卡在Loading composer repositories—— 若是,基本可定位为代理层问题,而非缓存或源配置 - 不要依赖
HTTP_PROXY环境变量,Composer 明确忽略它;所有代理必须通过composer config -g写入全局配置

















