Composer本身不支持限速,必须通过代理拦截请求;需同时设置http_proxy和https_proxy环境变量,推荐使用throttle-proxy轻量代理实现精准限速。

Composer 本身不支持限速,必须用代理拦截请求
Composer 没有 --limit-rate 或类似参数,所有“在命令里加限速”的尝试都会失败。它底层调用 PHP 的 file_get_contents 或 cURL,但不走 shell 层面的 curl --limit-rate,也不读取系统级流量控制工具(如 tc)的规则。
真正有效的做法是:让 Composer 的所有 HTTP/HTTPS 请求强制经过一个带限速能力的代理服务。关键点在于:
- 必须同时设置
http_proxy和https_proxy环境变量,否则 HTTPS 包源(如packagist.org)会直连绕过限速 - Composer 的元数据请求(
packages.json)走自己的 HTTP 客户端,受composer config -g http-proxy控制;但实际下载 zip/tar 包时,走的是 PHP 底层 stream 或 cURL,只认操作系统环境变量 - 若代理用自签名证书(如 mitmproxy),需额外配置
composer config -g disable-tls false并信任其 CA 证书,否则 HTTPS 请求直接失败
推荐用 throttle-proxy 快速起手
比起 mitmproxy 或 Charles Proxy,throttle-proxy 更轻量——无 UI、不存日志、启动快,专为本地限速压测设计,适合开发机临时验证安装鲁棒性。
安装与运行:
npm install -g throttle-proxy throttle-proxy --port 8080 --rate 50k
这会在 http://localhost:8080 启一个代理,所有经它转发的响应被硬限在 50 KB/s。然后设置环境变量:
- Linux/macOS:
export http_proxy=http://localhost:8080 && export https_proxy=http://localhost:8080 - Windows CMD:
set http_proxy=http://localhost:8080 && set https_proxy=http://localhost:8080
注意:某些 IDE(如 PhpStorm)终端可能不继承系统环境变量,务必在终端里手动设完再跑 composer install。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
为什么 composer config -g http-proxy 经常失效
这是最常踩的坑:composer config -g http-proxy 只影响 Composer 自己发的元数据请求(比如获取 packages.json),但真正耗时的包文件下载(.zip/.tar.gz)由 PHP 底层处理,完全不走这个配置。
验证是否真被限速:加 -vvv 运行 composer install -vvv,看日志里下载 .zip 时用的是 file_get_contents 还是 cURL,再确认对应方式是否读取了 http_proxy 和 https_proxy 环境变量。
如果你看到下载日志里地址仍是 https://mirrors.tuna.tsinghua.edu.cn/composer/... 且没卡顿,说明代理根本没生效——大概率是漏设了 https_proxy。
CI 或脚本中要稳定限速,得绕过 DNS 缓存
即使代理和镜像都配好了,PHP 的 cURL 默认复用 DNS 缓存,可能导致域名解析仍走海外节点,让限速形同虚设。
解决方法是加环境变量强制刷新 DNS:
export COMPOSER_NO_INTERACTION=1export COMPOSER_HOME=~/.composer- 在 Docker 构建中,提前
RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,避免每次构建都重新拉源
限速不是为了“慢”,而是为了暴露超时、重试、断点续传等真实问题。别在本地调通就认为没问题——CI 环境的网络抖动、DNS 不稳、并发竞争,往往比你手动限速更狠。

















