90%的“connection timed out”和“could not resolve host”卡在dns或tls握手阶段,未进入http请求,调http.timeout无效;应先换dns(如8.8.8.8)、验证解析、再换带斜杠的镜像源并清缓存。

不是“换个镜像就能好”,而是“不换镜像,其他操作大概率白做”——90% 的 Connection timed out 和 Could not resolve host 根本没走到 HTTP 下载阶段,卡在 DNS 或 TLS 握手,此时调 http.timeout 完全无效。
为什么 ping packagist.org 返回 unknown host 就别碰 composer config
这说明系统连域名都解析不了,composer config -g http.timeout 600 这类命令对 DNS 层零作用。Composer 此时甚至还没发任何 HTTP 请求,只是在查 packagist.org 的 IP 地址。
- Linux/macOS:直接往
/etc/resolv.conf里加一行nameserver 8.8.8.8(或114.114.114.114) - Windows:进“网络适配器设置 → IPv4 属性 → 手动填 DNS”
- 改完立刻验证:
nslookup packagist.org或dig packagist.org,看到 IP 才算成功
换镜像源必须带末尾斜杠,且要清缓存才真正生效
阿里云镜像正确地址是 https://mirrors.aliyun.com/composer/(注意末尾 /),少一个就会 404 并悄悄回退到官方源;清华镜像同理,https://mirrors.tuna.tsinghua.edu.cn/composer/ 也必须带斜杠。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 全局设镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 设完必须清缓存:
composer clear-cache,否则旧缓存里的错误地址仍可能被读取 - 验证是否生效:
composer config -g repo.packagist(看全局)和composer config repo.packagist(不加-g,看当前项目是否被composer.json里的repositories字段覆盖)
卡在 Downloading https://… 才轮到 http.timeout 发挥作用
这一阶段 Composer 真正在发 HTTP 请求拉 packages.json 或 ZIP 包,cURL error 28、SSL 失败、静默卡住都属于这个范围。此时 http.timeout 才管用,但要注意它只控制“连接建立 + 响应头返回”的总时间,不含下载体内容耗时。
- 推荐值:300~600 秒,全局设:
composer config -g http.timeout 600 - 项目级更稳妥(尤其 CI):
"config": { "http": { "timeout": 600 } }写进composer.json - 临时覆盖优先级最高:
COMPOSER_HTTP_TIMEOUT=600 composer install - 别混淆
process-timeout:它只 kill 整个进程(比如git clone或 post-install 脚本),跟 HTTP 下载无关
curl error 28 出现时,关键线索藏在 -vvv 输出的最后一行
加 -vvv 后不要扫全屏,盯住最后一段输出:
- 如果停在
Downloading https://mirrors.aliyun.com/composer/p2/xxx.json→ HTTP 层问题,调http.timeout+ 换 DNS - 如果停在
Cloning to /path/to/vendor/xxx→ 本质是git clone失败,跟 Composer 超时参数无关,要查 Git 代理、git config --global http.sslVerify或企业中间人证书 - 如果
-vvv最后显示error:14090086→ TLS 握手失败,大概率是系统时间不准(尤其 WSL/Docker)或代理未导入根证书
最常被忽略的是配置优先级和缓存残留:项目级 composer.json 中的 repositories 会完全屏蔽全局镜像设置,而 clear-cache 不清理内存中已加载的旧地址——遇到超时,先确认源是否真在用,再调参数。










