composer install卡在“loading composer repositories”且无报错,大概率是https-proxy缺失或中文/特殊字符未url编码;必须同时配置http-proxy和https-proxy(均以http://开头),否则https请求被直连丢弃。

composer install 卡在 “Loading composer repositories” 且无报错,大概率是 https-proxy 缺失或中文/特殊字符未编码——不是代理没开,是 Composer 根本没把请求发过去。
为什么只配 http-proxy 会静默失败
Composer 对 HTTP 和 HTTPS 请求走完全独立的路由:http-proxy 只管 http:// 请求,而 Packagist、GitHub 等所有现代仓库默认用 https://,必须由 https-proxy 字段接管。漏掉它,Composer 就直接走系统网络栈,在企业网关下等于被丢包。
-
https-proxy的值必须仍是http://开头(例如http://127.0.0.1:8080),填https://或省略协议头会静默失效 - 验证是否生效:运行
composer config -g --list | grep -E "(http|https)-proxy",必须看到两行输出,且 URL 格式合法 - 环境变量
HTTP_PROXY/HTTPS_PROXY默认不生效,Composer 优先读自身配置,设了也白设
http://user:pass@proxy 里含中文或 @ / / : 怎么填
Composer 解析代理 URL 时,只认第一个 @ 为用户名/密码分隔符;中文、@、/、: 不编码,就会截断或报 Invalid URI supplied。
- 必须对用户名或密码单独做 URL 编码:执行
php -r "echo rawurlencode('你的密码或用户名');",比如pa@ss/word→pa%40ss%2Fword - 完整地址写成:
http://user:pa%40ss%2Fword@127.0.0.1:8080(注意不是pa@ss/word) - 域名里带
@(如proxy@corp.com)同样要编码,否则解析失败 - Windows 下若提示
Could not write to file,检查%APPDATA%\Composer\config.json目录是否存在且可写
遇到 407 Proxy Authentication Required 怎么办
这是 NTLM 认证代理(常见于 Windows 域控环境)的标准响应,Composer 原生不支持 NTLM,任何 http-proxy 配置都无效。
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
- 不能靠改 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 - 先确认公司是否有免认证的 bypass 代理(如
http://bypass-proxy.internal:8080),直接配它更省事
代理设好了还是卡住?三步快速定位
现象都是“没报错但不动”,本质是某一层链路断了。别猜,用 curl 逐层验证:
- 先测基础连通:
curl -x http://127.0.0.1:8080 -I https://packagist.org/packages.json—— 若失败,说明代理本身不支持 CONNECT 隧道(即无法中转 TLS 流量) - 再查环境变量冲突:
unset HTTP_PROXY HTTPS_PROXY(Linux/macOS)或set HTTP_PROXY=(Windows CMD)后再试 - 最后看配置是否真写进去了:
composer config -g --list,重点确认http-proxy和https-proxy两字段都存在、非空、格式正确
最易被忽略的是:即使代理地址本身带 @(比如 DNS 名是 proxy@corp),也要 URL 编码——Composer 解析器不会区分它是域名还是密码部分,一律按第一个 @ 切分。










