composer不读系统环境变量,只认显式配置的http-proxy和https-proxy两个字段;必须同时存在且格式正确(https-proxy值须为http://开头),否则https请求静默直连导致卡在“loading composer repositories”。

查 http-proxy 和 https-proxy 是否已设
Composer 不读系统环境变量,只认自己配置的 http-proxy 和 https-proxy 两个字段。漏掉任一个,HTTPS 仓库(比如 Packagist)就会静默 fallback 到直连,卡在 “Loading composer repositories” 且无报错。
运行以下命令检查全局是否设置:
composer config -g --list | grep -E "(http|https)-proxy"
输出中必须同时出现两行,格式类似:
http-proxy http://127.0.0.1:8080<br>https-proxy http://127.0.0.1:8080
-
https-proxy的值必须是http://开头,哪怕代理本身支持 HTTPS —— 这是 Composer 硬性要求 - 若只看到
http-proxy没有https-proxy,说明 HTTPS 请求根本没走代理 - 不加
-g默认查当前项目,但代理几乎总是全局配置,否则换目录就失效
为什么 composer diagnose 查不到代理配置
composer diagnose 只检测网络连通性、PHP 扩展、CA 证书等,它完全不读取或显示 http-proxy / https-proxy 配置项。很多人误以为它能验证代理是否生效,其实不能。
常见误判场景:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
diagnose显示 “OK”,但composer install仍卡住 → 实际是代理缺https-proxy -
diagnose报 “Unable to access packagist.org” → 它只测连通性,不区分是代理问题还是 DNS/防火墙问题
真正要确认代理是否起作用,得看下载日志:composer install -v,观察请求 URL 是否发往代理地址(如 http://127.0.0.1:8080),而不是直接连 packagist.org。
密码含特殊字符时配置会静默失败
如果代理需要认证,https-proxy 值写成 http://user:pa@ss/word@127.0.0.1:8080 是错的 —— @ 和 / 必须 URL 编码。
- 正确做法:用
php -r "echo rawurlencode('pa@ss/word');"得到pa%40ss%2Fword,再拼成http://user:pa%40ss%2Fword@127.0.0.1:8080 - 填错的典型现象:无任何错误提示,但所有 HTTPS 请求都超时或返回 502
- Windows 下还要注意
%APPDATA%\Composer\config.json是否可写,否则config -g会静默失败
NTLM 代理(如企业域环境)无法原生支持
Composer 原生不处理 NTLM 认证,设了 http-proxy 也会直接返回 407 Proxy Authentication Required 或连接失败。
必须引入中转代理工具,例如:
-
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,说明中转没配好
别指望改 Composer 配置绕过 NTLM —— 它就是不支持,这是底层限制,不是配置问题。










