composer install卡在downloading packagist.org是本地网络重定向循环所致,主因是代理/hosts/dns劫持导致302跳转闭环,需通过curl -v和nslookup验证并清除http_proxy、hosts条目或关闭代理工具。

Composer install 时卡在 Downloading https://packagist.org/packages.json 并反复重试
这是本地网络配置导致的典型重定向循环:Composer 请求 https://packagist.org,却被代理或 hosts 规则强制跳转到某个本地地址(比如 http://127.0.0.1:8080),而该地址又返回 302 跳回 packagist.org,形成闭环。现象是命令行持续输出 Redirecting to http://...,最终超时或报 cURL error 7: Failed to connect。
排查优先看是否启用了以下任一配置:
- 系统级或终端级设置了
HTTP_PROXY/HTTPS_PROXY环境变量,且指向了不处理 HTTPS 重定向的本地代理(如某些调试代理、旧版 Charles) -
/etc/hosts(macOS/Linux)或C:\Windows\System32\drivers\etc\hosts(Windows)里有类似127.0.0.1 packagist.org的条目 - 公司网络策略或路由器 DNS 劫持,将
packagist.org解析到内网 IP
验证是否为 DNS 或 hosts 导致的重定向循环
用最简命令绕过 Composer 缓存和配置,直连测试:
curl -v https://packagist.org/packages.json
观察输出中的 和 <code> 字段。如果 location 指向一个本地地址(如 <code>http://localhost:8080/... 或 http://127.0.0.1/...),基本可确认是本地网络层劫持。
再执行:
nslookup packagist.org
检查返回的 IP 是否为 127.0.0.1、::1 或非官方 IP(官方 IPv4 是 146.75.119.170,IPv6 是 2a02:6b8::146:75:119:170)。若不符,说明 DNS 被污染或 hosts 干预。
临时禁用代理与 hosts 干扰的实操步骤
不要直接改全局配置,先做最小干预验证:
- 运行前临时清空代理变量:
HTTP_PROXY= HTTPS_PROXY= composer install - 临时绕过 hosts:Linux/macOS 下加
--resolve packagist.org:443:146.75.119.170(需 curl 7.21.3+);Windows 可用curl -H "Host: packagist.org" https://146.75.119.170/packages.json - 临时切换 Composer 镜像源(仅用于验证):
composer config -g repo.packagist composer https://packagist.phpcomposer.com(注意:该镜像已停用,仅作示意;推荐用https://mirrors.aliyun.com/composer/)
成功后,再逐项恢复,定位是哪个配置触发了循环。
为什么 composer config -g secure-http false 不能解决这个问题
这个配置只影响 Composer 对「包仓库 URL 是否必须为 HTTPS」的校验,跟网络重定向完全无关。它不会跳过 DNS 解析、不会绕过代理、也不会阻止 302 响应。设成 false 后,如果重定向目标是 http:// 地址,Composer 反而会因安全策略拒绝继续(报 Invalid repository type, expected 'composer', got 'package' 类错误)。
真正要动的是网络链路本身:
- 删掉 hosts 里所有含
packagist.org的行 - 检查 shell 配置文件(
~/.zshrc、~/.bash_profile、%USERPROFILE%\Documents\PowerShell\profile.ps1)是否硬编码了代理 - 关闭正在运行的 Fiddler、Charles、Whistle 等代理工具,或将其 HTTPS 解密功能暂时关闭
重定向循环本质是 TCP 层或 HTTP 层被中间设备篡改,Composer 只是受害者。修底层,别调 Composer 参数。











