Composer卡在“Loading composer repositories”或报cURL error 28,本质是仅配http-proxy导致HTTPS请求静默直连,并非真实重定向循环;必须同时配置http-proxy和https-proxy,且https-proxy值必须以http://开头,否则HTTPS流量无法走代理隧道。

Composer 本身不产生 HTTPS 重定向循环,你看到的 ERR_TOO_MANY_REDIRECTS 或卡在 Loading composer repositories,基本是代理配置错误导致 HTTPS 请求被静默直连,触发底层 cURL 的连接超时或重试逻辑,**不是真正的 HTTP 301/302 循环**。本质是 Composer 把 HTTPS 流量错当成 HTTP 流量处理了。
为什么只配 http-proxy 会“像”重定向循环
Composer 内部对协议做了硬性分流:
-
http-proxy只管http://协议请求(极少用) -
https-proxy才管所有https://请求(Packagist、GitHub、GitLab 全走这儿) - 漏配
https-proxy→ Composer 对 HTTPS 仓库发起直连 → 网络不通/超时 → 不报明确错误,只卡住或抛cURL error 28 - 用户误以为是“跳来跳去”,其实是请求根本没发出去
https-proxy 必须写成 http:// 开头
这是 Composer 的强制约定,和你的代理服务是否支持 HTTPS 无关:
- ✅ 正确:
http://127.0.0.1:7890(Clash/Proxyman) - ✅ 正确:
http://user:pa%40ss%2Fword@127.0.0.1:8080(密码含@或/必须 URL 编码) - ❌ 错误:
https://127.0.0.1:7890(会被忽略) - ❌ 错误:
127.0.0.1:7890(缺协议头,非法)
验证是否生效:composer config -g --list | grep -E "(http|https)-proxy" —— 必须两行都输出且格式合规。
NTLM 代理(如公司域环境)必须中转
Composer 原生不支持 NTLM 认证,设了 http-proxy 也会直接返回 407 Proxy Authentication Required:
- Windows 推荐用
cntlm或px,监听127.0.0.1:3128并处理 NTLM - 然后把 Composer 的
http-proxy和https-proxy都设为http://127.0.0.1:3128 - 验证中转层:
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,若也报 407,说明中转没通
超时还可能是 PHP 层级掐断
即使代理配对了,仍可能超时,因为有两个超时阈值要对齐:
-
composer config -g http.timeout 600(设为 600 秒) - PHP 的
default_socket_timeout必须 ≥ 这个值(查:php -i | grep default_socket_timeout) - 若 PHP 默认是 60 秒,那 Composer 设 600 毫无意义——连接会在 60 秒时被 PHP 强制中断
真正容易被忽略的是:这个 PHP 配置通常在 php.ini 里,不是 Composer 配置能覆盖的。











