根本原因是https-proxy缺失或格式错误:composer严格分离http/https代理路由,仅配http-proxy无法处理packagist等https请求,必须同时配置http-proxy和https-proxy且均以http://开头,否则请求被直连拦截并静默卡在“loading composer repositories”。

Composer 无法通过代理安装依赖,根本原因几乎总是 https-proxy 缺失或格式错误——它和 http-proxy 必须同时存在、都用 http:// 协议开头,否则所有 HTTPS 请求(包括访问 Packagist)都会被直连拦截,现象是 composer install 卡在 “Loading composer repositories” 且无报错。
为什么只配 http-proxy 还是卡住
因为 Packagist、GitHub、GitLab 等现代 PHP 仓库全量走 HTTPS,而 Composer 对协议是严格分离路由的:http-proxy 只用于 HTTP 请求,https-proxy 才负责建立 CONNECT 隧道处理 HTTPS。漏掉后者,Composer 就会 fallback 到系统直连,在企业防火墙或受限网络下等于失败。
- 运行
composer config -g --list | grep -E "(http|https)-proxy",必须看到两行输出,缺一不可 - 填错
https-proxy值(比如写成https://127.0.0.1:8080或漏http://)会导致静默失效,没有任何错误提示 - 即使你用的是 HTTPS 代理服务,
https-proxy的值仍必须是http://127.0.0.1:8080——这是 Composer 的硬性约定,不是配置错误
http://user:pass@proxy 里密码含 @、/、: 怎么办
Composer 解析代理 URL 时,第一个 @ 就被当作用户名/密码分隔符,后面的内容全被截断。例如 http://user:pa@ss/word@127.0.0.1:8080 实际解析为用户名 user、密码 pa,剩余部分被丢弃,最终报 Invalid URI supplied 或直接跳过代理。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 必须对密码(或用户名)做
rawurlencode()编码:用php -r "echo rawurlencode('pa@ss/word');"得到pa%40ss%2Fword - 完整地址写成
http://user:pa%40ss%2Fword@127.0.0.1:8080 - 域名里带
@(如proxy@corp.com)也得编码,否则同样解析失败 - Windows 下注意路径权限:若
composer config -g报Could not write to file,检查%APPDATA%\Composer\config.json是否存在且可写
公司用 NTLM 代理(如 Windows 域环境)怎么办
Composer 原生完全不支持 NTLM 认证,设了任何 http-proxy 都会返回 407 Proxy Authentication Required 或 Unable to connect to http://repo.packagist.org ——这不是配置姿势问题,是协议层不兼容。
- 唯一可行解法:本地起中转代理,比如
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 - 临时验证是否是 NTLM 问题:执行
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,如果curl也报407,说明中转层没配好 - 别指望
HTTP_PROXY环境变量能绕过——Composer 明确忽略它,只认自己的http-proxy字段
代理设好了还是慢或失败,怎么快速定位
现象一致:没报错、不卡死、就是卡在 “Loading composer repositories”,本质是链路里某环断了,但 Composer 不告诉你哪一环。
- 先确认代理进程在运行、端口没被防火墙拦截:
curl -x http://127.0.0.1:8080 -I https://packagist.org/packages.json - 若返回
Connection refused:代理没开、端口错、或地址漏了http:// - 若返回
file_get_contents(): SSL operation failed:代理未透传 TLS,或本地 CA 不被信任;换用http://代理可绕过 - 若返回
502 Bad Gateway或超时:代理服务本身无法访问 Packagist,可能是内网策略限制 - CI/CD 环境建议统一用环境变量方式,但本地开发请坚持用
composer config -g,避免混用导致优先级干扰
最易被忽略的点是:所有验证都必须用 https:// 地址(比如 https://packagist.org/packages.json),因为 Composer 的核心请求全是 HTTPS;只测 http:// 地址毫无意义。










