Composer的https-proxy必须填http://开头的完整URL,密码含@或/需URL编码,如pa@ss/word→pa%40ss%2Fword;填错协议头或未配NTLM中转代理会导致407错误。

Composer 不支持在代理配置里交互式输入账号密码,必须提前写死或 URL 编码后填入配置。
https-proxy 值里怎么填带认证的代理地址
Composer 的 https-proxy 字段只接受完整 URL 格式,用户名和密码必须拼在 URL 里,且必须做 URL 编码。
- 原始地址:
http://user:pa@ss/word@127.0.0.1:8080→ 错误:@ 和 / 会破坏 URL 结构 - 正确做法:用
rawurlencode()编码密码部分,例如:php -r "echo rawurlencode('pa@ss/word');"输出pa%40ss%2Fword - 最终填入的值应为:
http://user:pa%40ss%2Fword@127.0.0.1:8080 - 注意:协议头必须是
http://,哪怕代理监听的是 HTTPS 端口;填https://或漏掉协议头都会静默失效
为什么填了账号密码还是报 407 Proxy Authentication Required
这通常不是 Composer 配置问题,而是代理协议不兼容。
- Composer 原生不支持 NTLM、Kerberos 等 Windows 域认证协议
- 直接填
http://domain\user:pass@...或http://user@domain:pass@...会被拒绝,返回 407 - 解决路径不是改 Composer,而是加一层中转代理:用
cntlm或px在本地监听127.0.0.1:3128,让它处理 NTLM 认证,再让 Composer 连这个本地地址 - 验证中转是否生效:
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,如果也报 407,说明中转没配好
别指望 auth.json 或 github-oauth 能帮忙
auth.json 只用于私有仓库(如 GitLab、GitHub 私有库)的 HTTP Basic 认证,跟出站代理完全无关。
-
auth.json里的gitlab.example.com是匹配仓库 host,不是代理 host -
github-oauth只影响 GitHub API 请求,不影响 Composer 连代理 - 把账号密码往这些地方填,对代理认证失败毫无作用
最易被忽略的一点:即使密码编码正确、地址格式合规,若代理服务本身未启用基本认证(Basic Auth),或者认证方式是 IP 白名单、证书双向认证等非标准模式,Composer 仍会失败——它只认标准 HTTP Basic over CONNECT。


















