composer卡在“loading composer repositories”大概率因未配置https-proxy;packagist全走https,仅配http-proxy无效,必须同时设置http-proxy和https-proxy(均以http://开头),且需全局配置、密码url编码,并用curl -x和composer config -g --list双重验证。

Composer安装依赖卡在Loading composer repositories,大概率不是网络慢,而是https-proxy根本没配——只配http-proxy对Packagist完全无效。
为什么只设http-proxy还是连不上
因为Packagist、GitHub、所有镜像源全走HTTPS,而http-proxy只管HTTP请求;HTTPS必须靠https-proxy建立CONNECT隧道。漏掉它,Composer就静默fallback到直连,结果就是卡住、无报错、无日志、无限等待。
-
https-proxy的值必须以http://开头(哪怕代理监听的是TLS端口),填https://127.0.0.1:8080或裸地址127.0.0.1:8080都会失效 - 必须加
-g写入全局配置,否则只在当前目录生效,换项目就“失忆” - 密码含
@、/、:要URL编码,例如pa@ss/word→pa%40ss%2Fword,可用php -r "echo rawurlencode('pa@ss/word');"生成 - 执行
composer config -g --list | grep -E "(http|https)-proxy",必须看到两行且URL格式合法
curl -x验证代理是否真通
别信composer diagnose,它只测packagist.org的HTTP端口,不走你配的https-proxy,结果为OK ≠ 代理可用。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 手动模拟Composer行为:
curl -x http://127.0.0.1:8080 -I https://packagist.org/packages.json - 返回
HTTP/1.1 200 OK说明隧道通;如果Failed to connect或卡住,就是代理不支持HTTPS CONNECT,常见于Clash旧版、Charles、部分Squid - Clash用户检查规则是否有
DOMAIN-SUFFIX,packagist.org,PROXY;Squid确认connect_ports包含443
公司NTLM代理或MITM证书失败怎么办
这类代理会动态签发证书,但PHP OpenSSL默认不信任其根证书,现象是cURL error 35或SSL routines:ssl3_read_bytes:sslv3 alert handshake failure,不是连不上,是TLS握手被拒。
- 先临时绕过验证:
HTTP_PROXY= HTTPS_PROXY= composer install,如果成功,基本锁定证书问题 - NTLM代理(如Windows域环境)Composer原生不支持,必须用
cntlm或px中转:让它们监听127.0.0.1:3128并处理认证,再把http-proxy和https-proxy都指向这个地址 - 导出代理根证书(如
fiddler-root.cer),转成PEM后执行:composer config -g cafile /path/to/fiddler-root.pem - WSL2用户务必运行
sudo hwclock -s同步主机时间,时间不同步会导致TLS握手失败
镜像源和代理能不能共存
不能。二者互斥:repo.packagist一设,http-proxy和https-proxy自动失效。你不可能一边走镜像一边走代理。
- 症状:明明配了阿里云镜像,却仍卡在
Loading composer repositories;日志里看不到Proxy CONNECT,但公司策略又强制HTTPS过代理 - 真要用代理,第一步必须清空镜像:
composer config -g --unset repo.packagist(注意不是repos.packagist) - 国内用户优先用镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,末尾/不能少,配完立刻composer clear-cache - 私有Git包拉取失败?那是Git进程没配代理,和Composer无关:
git config --global http.proxy http://127.0.0.1:8080
最常被忽略的点:代理配置错误时,Composer从不报错,只会沉默 fallback;验证必须靠curl -x和config -g --list双查,缺一不可。










