必须同时配置http-proxy和https-proxy,因composer严格按协议路由:仅配前者时https仓库请求回退直连,导致“loading composer repositories”静默卡住;https-proxy值须以http://开头,且两字段均需全局设置并验证存在。

为什么只配 http-proxy 代理后依然卡在 “Loading composer repositories”
因为 Packagist 全量走 HTTPS,而 Composer 对代理是严格分协议路由的:http-proxy 只用于 HTTP 请求,https-proxy 才用于 HTTPS 的 CONNECT 隧道。漏掉后者,所有仓库请求都 fallback 到直连,结果就是静默卡住、无报错、超时后才失败。
必须同时配置两个字段,且都加 -g(全局):
composer config -g http-proxy http://127.0.0.1:8080-
composer config -g https-proxy http://127.0.0.1:8080(注意:值必须是http://开头,哪怕代理本身监听 TLS 端口)
验证方式:composer config -g --list | grep -E "(http|https)-proxy",两行都得有,且格式正确。填成 https://127.0.0.1:8080 或漏协议头,都会静默失效。
cURL error 28 和 process-timeout 完全不是一回事
看到 cURL error 28: Operation timed out after 300000 milliseconds,说明是底层 HTTP 连接超时——DNS 解析、TLS 握手、首字节等待这些环节都归它管。process-timeout 压根不介入,它只控制整条命令从启动到退出的总生命周期(比如解压、运行脚本、生成 autoload)。
真正该调的是:
-
http.timeout:单次 HTTP 请求最大耗时(单位秒),建议设为600:composer config -g http.timeout 600 -
process-timeout:整条命令上限,默认300,大项目建议1200:composer config -g process-timeout 1200
改完立刻清缓存:composer clear-cache,否则旧包仍可能从旧源拉取,掩盖配置是否生效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
代理配对了还是慢?先确认是不是 NTLM 环境
公司内网用 Windows 域认证(NTLM)时,Composer 原生不支持。设了 http-proxy 也会直接返回 407 Proxy Authentication Required 或连接失败。
不能靠改 Composer 配置解决,必须引入中转代理工具:
- 推荐
cntlm或px,让它们监听127.0.0.1:3128并处理 NTLM 认证 - 再把 Composer 的
http-proxy和https-proxy都指向这个本地地址 - 临时验证:
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,如果curl也报 407,说明中转层没配通
别指望系统级 HTTP_PROXY 环境变量——Composer 明确忽略它,只认自己的配置项。
怎么快速判断卡在哪一层?看 -vvv 最后一行输出
运行 composer install -vvv,盯住最后几行,不同卡点对应不同问题域:
- 停在
Resolving dependencies:纯本地 CPU 暴力穷举,跟网络、代理、超时全无关。检查minimum-stability是否为dev、PHP 版本约束是否太宽(如"php": ">=7.4") - 停在
Downloading https://...:HTTP 层卡住,调http.timeout,并确认镜像 URL 末尾带/、键名是repo.packagist(不是repos) - 停在
Executing command (CWD: ...):子进程(如git clone、unzip)卡死,这时process-timeout才起作用
最常被忽略的是:卡在 Generating autoload files 后无响应——这根本不是网络问题,而是文件系统(如 WSL2 挂载目录)、PHP 配置(Xdebug 开着)、或某个 post-install-cmd 脚本在后台死循环。










