因为Composer对HTTP和HTTPS请求使用完全独立的代理通道,http-proxy仅处理HTTP请求,而Packagist等仓库全量使用HTTPS,必须通过https-proxy建立CONNECT隧道;缺失https-proxy时,HTTPS请求会静默fallback至直连,导致卡在“Loading composer repositories”且无报错。

为什么只配 http-proxy 会卡在 “Loading composer repositories”
Composer 对 HTTP 和 HTTPS 请求走完全独立的代理通道,http-proxy 只管 http:// 请求,而 Packagist、GitHub 等所有仓库全量走 HTTPS,必须靠 https-proxy 建立 CONNECT 隧道。漏掉它,Composer 就会把 HTTPS 请求 fallback 到直连——没报错,但永远卡住或超时。
典型现象包括:
- 执行
composer install后长时间停在Loading composer repositories,无错误输出 -
composer config -g --list里只显示http-proxy,缺https-proxy - 填了
https://127.0.0.1:8080或裸地址127.0.0.1:8080,实际必须是http://127.0.0.1:8080(协议头强制为http://)
https-proxy 值写错导致静默失败的修复步骤
写错 https-proxy 不会报错,只会让所有 HTTPS 流量绕过代理直连,最终因防火墙或 DNS 拦截失败。修复必须严格按顺序操作:
- 运行
composer config -g --unset https-proxy http-proxy彻底清空 - 确认代理服务已启动且监听地址可访问:用
curl -x http://127.0.0.1:8080 -I https://packagist.org/packages.json验证 - 密码含
@、/、:必须 URL 编码,例如pa@ss/word→pa%40ss%2Fword,可用php -r "echo rawurlencode('pa@ss/word');"生成 - 重新设置:
composer config -g http-proxy http://user:pass%40word@127.0.0.1:8080和composer config -g https-proxy http://user:pass%40word@127.0.0.1:8080
代理失效时 Composer 不会自动降级到直连
Composer 没有“代理故障自动切换”机制。一旦配置了 http-proxy 或 https-proxy,它就坚持走代理;代理不可达,就会卡死或超时,绝不会退回到系统默认网络路径。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
临时绕过代理的唯一可靠方式是:
- 全局禁用:
composer config -g --unset http-proxy https-proxy - 或启用离线模式(跳过所有网络请求):
COMPOSER_DISABLE_NETWORK=1 composer install - 若需保留部分网络行为(如读取本地
composer.lock),可配合镜像源降级:composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/,再清除缓存:composer clear-cache
NTLM 代理环境下必须加中转层
公司内网常见 NTLM 认证代理(比如 Windows 域环境),Composer 原生不支持。设了 http-proxy 也会直接返回 407 Proxy Authentication Required 或连接失败。
不能靠改 Composer 配置解决,必须引入本地中转代理工具:
- 推荐
cntlm或px,它们监听127.0.0.1:3128,处理 NTLM 认证后,再把请求转发给企业代理 - 然后让 Composer 连这个本地地址:
composer config -g http-proxy http://127.0.0.1:3128和composer config -g https-proxy http://127.0.0.1:3128 - 验证中转是否生效:
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,若仍报 407,说明中转层未配置好或凭据错误
真正容易被忽略的是:即使代理配置正确,Composer 也不会尝试“先走代理,失败再直连”。它的行为是确定性的——配了就只走配的那条路,没配才走系统默认路径。任何“自动降级”都得靠人手动干预或脚本封装。

















