答案是网络链路在dns、tcp或tls层中断,需先用ping和curl定位:ping packagist.org返回unknown host即dns失败,换8.8.8.8;curl -i https://packagist.org卡住则为防火墙或代理拦截。

Composer 执行命令卡住、报 Could not resolve host、curl error 28 或 403 Forbidden,90% 不是 Composer 坏了,而是网络链路某一层断了——得一层层往下查,不能一上来就换源或调超时。
先确认是 DNS、连接还是 TLS 卡住
别急着改 composer.json 或重装 Composer,先用两行命令快速定位:
-
ping packagist.org:返回unknown host→ DNS 解析失败,换系统 DNS(如8.8.8.8或223.5.5.5)比调超时管用十倍 -
curl -I https://packagist.org:卡住或报Failed to connect→ 防火墙、代理或 HTTPS 策略拦截,切手机热点一试便知
公司/学校网络常统一屏蔽 https://packagist.org 和 https://github.com,这不是你配错了,是策略本身不放行。
镜像源配置写对了但不生效?检查三个硬条件
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 这条命令静默失败很常见,根本原因是没同时满足:
- 键名必须是
repo.packagist(注意repo是单数,写成repos.packagist或packagist.org全无效) - 中间的
composer是固定 type 值,不能省略、不能替换成域名或注释 - URL 必须是 HTTPS 且末尾带
/,例如https://mirrors.aliyun.com/composer/✅,少斜杠会拼出/composerpackages.json导致 404
验证是否真正写入:composer config -g repo.packagist 输出必须是完整 JSON 对象,形如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null 或报错,说明配置根本没落盘。
换了镜像还报 403?先 curl 模拟请求再判断
报错含 mirrors.aliyun.com 或 mirrors.tuna.tsinghua.edu.cn 时,别直接换源,先用 curl 模拟 Composer 请求:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
curl -v -A "Composer/2.9.6" https://mirrors.aliyun.com/composer/packages.json
如果返回 HTTP/1.1 403 Forbidden 且响应体为空或含 Access Denied,说明镜像服务端拦截了请求——常见于防火墙过滤了默认 User-Agent,或该镜像临时限流。
如果配置指向已下线源(如 packagist.phpcomposer.com 或 packagist.laravel-china.org),那不是“挂了”,是地址根本无效,必须换。运行 composer config -g repo.packagist 查当前配置就能确认。
GitHub API 卡住?Token 配置极易静默失效
composer update -vvv 卡在 api.github.com,配了 Token 还没用,大概率是以下任一原因:
- 域名必须严格写成
github.com,不能是api.github.com、www.github.com或带https:// - 正确命令:
composer config --global github-oauth.github.com ghp_xxx - 验证是否生效:
composer config --global --list | grep github-oauth,输出应为"github.com": "ghp_" - Token 必须勾选
repo和read:packages;复制时带空格或换行会导致失效,可用echo "$TOKEN" | hexdump -C检查 -
~/.composer/auth.json权限必须是600(Linux/macOS),否则 Composer 直接忽略该文件
镜像源只加速 zip 包下载,不替代 GitHub API 调用。Composer 仍需访问 api.github.com 获取包元数据(版本列表、commit hash 等),这部分不受镜像影响——所以必须同时配好镜像源和 GitHub Token。










