HTTP_PROXY环境变量对Composer无效,因其仅读取自身配置中的http-proxy和https-proxy字段(连字符),且https-proxy值必须以http://开头、密码含特殊字符需URL编码、NTLM代理需通过cntlm等中转。

为什么HTTP_PROXY环境变量完全没用
Composer 2.2 之前版本压根不读 HTTP_PROXY 或 HTTPS_PROXY,2.2+ 虽支持但默认仍不启用——它只认自己配置里的 http-proxy 和 https-proxy 字段(注意是连字符,不是下划线)。你 export HTTP_PROXY=http://127.0.0.1:8080 后运行 composer install,它照样直连 packagist.org。
验证方式很简单:composer config -g --list | grep -E "(http|https)-proxy"。如果没输出,或只有一行,说明代理根本没进 Composer 的配置系统。
- 别改
~/.bashrc或~/.zshrc里 export 行,那对 Composer 没意义 -
composer config -g http-proxy和composer config -g https-proxy必须都执行,缺一不可 - Windows 用户注意大小写:PowerShell 里
$env:HTTP_PROXY不影响 Composer,CMD 里set HTTP_PROXY=...同样无效
https-proxy 值填 https:// 就静默失效
这是 Composer 的硬规则:https-proxy 字段的值必须以 http:// 开头,哪怕你用的是 HTTPS 协议的代理服务。填 https://127.0.0.1:8080 或 socks5://127.0.0.1:1080(旧版),Composer 会直接跳过该配置,不报错、不提示,请求照常直连。
正确写法始终是:http://127.0.0.1:8080(无认证)或 http://user:pass@127.0.0.1:8080(有认证)。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- SOCKS5 支持仅限 Composer ≥ 2.2,且需确认代理本身开启 CONNECT 隧道
- Clash、Fiddler、Charles 等工具默认监听
http://127.0.0.1:7890,就用这个地址,别强行改成 https - 填错协议后,
composer install -vvv日志里看不到Proxy CONNECT,只有超时或 TLS 错误
密码含 @ 或 / 导致解析失败
Composer 解析代理 URL 时,只把第一个 @ 当作用户名/密码分隔符。比如密码是 pa@ss/word,填成 http://user:pa@ss/word@127.0.0.1:8080,它实际只取到 pa 作密码,后面全丢弃,最终报 Invalid URI supplied 或直接忽略代理。
必须做 URL 编码:php -r "echo rawurlencode('pa@ss/word');" 输出 pa%40ss%2Fword,完整地址写成 http://user:pa%40ss%2Fword@127.0.0.1:8080。
- 用户名含
@(如dev@corp.com)同样要编码,否则也会被截断 - 冒号
:在密码里也要编码为%3A - 编码后地址务必用双引号包裹再传给
composer config,避免 shell 解析出错
NTLM 代理下死活报 407 Proxy Authentication Required
Composer 原生不支持 NTLM 认证协议。你在域控环境设了 http://domain\user:pass@proxy:8080,它根本不会发 NTLM challenge,而是直接返回 407 或卡在连接阶段。
唯一解法是本地起一层中转:cntlm 或 px 监听 127.0.0.1:3128,让它处理 NTLM 握手,再让 Composer 连这个本地普通 HTTP 代理。
-
cntlm配置里必须指定Domain、Username、PassLM/PassNT(不能明文密码) - 启动后用
curl -x http://127.0.0.1:3128 https://packagist.org/packages.json先验证中转是否通 - 然后执行
composer config -g http-proxy http://127.0.0.1:3128和composer config -g https-proxy http://127.0.0.1:3128

















