因为packagist全量走https,而http-proxy仅处理http请求;https必须依赖https-proxy建立connect隧道,漏配则fallback直连导致静默超时或tls失败。

为什么只配 http-proxy 会卡在 “Loading composer repositories”
因为 Packagist 全量走 HTTPS,而 http-proxy 只处理 HTTP 请求;HTTPS 必须靠 https-proxy 建立 CONNECT 隧道。漏掉后者,Composer 就会 fallback 到直连,结果是静默超时、cURL error 28 或 TLS 握手失败。
常见错误现象:
- 执行
composer install卡住不动,无报错 - 加
-vvv后日志里看不到Proxy CONNECT字样 -
curl -x http://127.0.0.1:8080 https://packagist.org/packages.json能通,但 Composer 不行——说明配置没生效
必须同时设置两个字段,且都加 -g(全局):
composer config -g http-proxy http://user:pass@127.0.0.1:8080 composer config -g https-proxy http://user:pass@127.0.0.1:8080
注意:https-proxy 的值必须以 http:// 开头,哪怕代理本身监听 HTTPS 端口;填 https:// 或漏协议头,就等于没配。
配了代理还连不上?先清空镜像再验证
镜像源(如 repo.packagist.org)和代理互斥:只要设了 repo.packagist,http-proxy 和 https-proxy 就被完全忽略。国内用户 90% 的“卡死”,根源就是两者混用。
正确做法是二选一:
- 要走代理 → 必须删镜像:
composer config -g --unset repo.packagist(不是repos.packagist或packagist.org) - 要走镜像 → 不要配任何 proxy 字段,否则形同虚设
验证是否真正启用代理:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer config -g --list | grep -E "(http|https)-proxy",确认两行都存在 - 临时加
-n -vvv执行composer install,日志中出现Proxy CONNECT才算成功
密码含 @、/、: 怎么办
这些字符在 URL 中有特殊含义,不编码会导致解析失败——比如 pa@ss/word 会被截成用户名 pa、主机 ss/word,然后报 Failed to parse address。
必须用 rawurlencode() 编码:
php -r "echo rawurlencode('pa@ss/word');"
输出 pa%40ss%2Fword,再填入代理 URL:
composer config -g https-proxy http://user:pa%40ss%2Fword@127.0.0.1:8080
Windows 用户额外注意:%APPDATA%\Composer\config.json 目录需有写权限,否则 config -g 会报 Could not write to file。
NTLM 代理或公司根证书不被信任怎么办
Composer 原生不支持 NTLM 认证。设了 http-proxy 也会直接返回 407 Proxy Authentication Required 或 Unable to connect。
必须引入中转代理工具:
- Windows 域环境推荐
cntlm或px,让它们监听127.0.0.1:3128并处理 NTLM,再让 Composer 连这个本地地址 - 证书问题表现为
SSL operation failed或certificate verify failed,需显式指定公司根证书:composer config -g cafile /path/to/your-root.pem - 别指望系统
HTTP_PROXY环境变量——Composer 明确忽略它,只认自己的配置字段
最易被忽略的一点:代理配置生效的前提是「镜像已清空 + 两个 proxy 字段齐全 + URL 编码正确 + CA 证书可信」,四个条件缺一不可。少一个,就退回直连状态,而且往往不报错,只卡住。










