Composer 2.0+已废弃项目级http-proxy字段,局部代理需用repo.packagist.org.proxy等仓库级配置,仅对Packagist官方源生效,且2.2+才支持SOCKS5;NTLM代理必须通过本地中转(如cntlm)实现。

局部代理配置只对当前项目生效,必须写进项目级 composer.json
全局代理(composer config -g)会影响所有项目,而局部代理只改当前目录下的 composer.json。它不走 config.json,而是直接嵌入项目配置的 config 字段里。
注意:Composer 从 2.0 起已废弃 http-proxy 和 https-proxy 的项目级字段支持——它们**只在全局配置中有效**。所以“局部代理”本质是伪命题,但有变通路径:
- 若你用的是 Composer 2.2+,可尝试
repo.packagist.org.proxy和repo.packagist.org.ssl-proxy这类仓库粒度的代理字段,它们支持项目级配置 - 执行命令:
composer config repo.packagist.org.proxy http://127.0.0.1:7890(不加-g) - 再配 SSL 代理:
composer config repo.packagist.org.ssl-proxy http://127.0.0.1:7890 - 验证是否写入:
cat composer.json | grep -A5 "config",确认字段出现在"config"下而非"repositories"或顶层
repo.packagist.org.proxy 不是万能的,只对 Packagist 官方源起作用
这个字段只影响 https://repo.packagist.org 及其子路径(如 /packages.json、/p2/xxx.json),对其他源比如 GitHub、GitLab、私有 VCS 源或自定义 Composer 仓库完全无效。
常见误判场景:
- 项目里声明了
"repositories": [{"type": "vcs", "url": "https://git.example.com/mylib"}]→ 这个 Git 地址不会走repo.packagist.org.proxy - 用了
composer create-project→ 它内部仍会先访问https://repo.packagist.org/packages.json,此时才触发该代理 - 镜像源和代理混用:
repo.packagist已设为阿里云镜像,那repo.packagist.org.proxy就被彻底忽略
SOCKS5 代理仅限 Composer ≥ 2.2,且必须显式写 socks5://
Clash、Proxifier 等工具常暴露 SOCKS5 端口(如 127.0.0.1:7891),但旧版 Composer 根本不认识 socks5:// 协议前缀,会静默 fallback 到直连。
正确写法(仅 Composer 2.2+ 支持):
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
composer config repo.packagist.org.proxy socks5://127.0.0.1:7891 composer config repo.packagist.org.ssl-proxy socks5://127.0.0.1:7891
验证是否生效:运行 composer install -n -vvv 2>&1 | grep "Proxy CONNECT",看到日志里出现 CONNECT repo.packagist.org:443 HTTP/1.1 才算真正走通。
容易踩的坑:
- 填成
socks5h://或socks://→ 不识别,静默失败 - 代理服务未启用 DNS 解析(如 Clash 的
mode: redir-host不支持 SOCKS5 DNS)→Could not resolve host错误 - 没开 TLS 透传 → 即使 CONNECT 成功,后续 TLS 握手也会卡在
cURL error 35
局部代理无法绕过公司 NTLM 认证,必须靠本地中转
如果公司网络强制走 NTLM 代理(典型表现是 407 Proxy Authentication Required),哪怕你在 composer.json 里写了 proxy 字段也无用——Composer 不解析 NTLM 头,更不会自动转发认证凭据。
唯一可行路径是:在本机起一个支持 NTLM 的中转代理(如 cntlm 或 px),监听 127.0.0.1:3128,再让 Composer 连这个地址:
- 启动 cntlm:
cntlm -c cntlm.conf -l 3128(配置文件里填好域、用户名、密码哈希) - 项目内执行:
composer config repo.packagist.org.proxy http://127.0.0.1:3128 - 务必验证:
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json要返回200 OK
别指望 http_proxy 环境变量能补救——Composer 明确忽略它,只认自己配置的字段。

















