composer代理必须同时配置http-proxy和https-proxy(均以http://开头),缺一不可;否则composer install会静默卡在“loading composer repositories”,因https请求直连失败。

Composer 设置代理不是“配一个就行”,必须同时设 http-proxy 和 https-proxy,缺一不可——否则 composer install 会卡在 Loading composer repositories,且不报错、不超时、不提示,只干等。
为什么只配 http-proxy 一定失败
Packagist、GitHub 等所有主流 PHP 仓库默认走 HTTPS,而 Composer 对协议是硬隔离的:http-proxy 只处理 HTTP 请求,https-proxy 才负责建立 CONNECT 隧道转发 HTTPS 流量。漏掉后者,Composer 就把 HTTPS 请求直接扔给系统网络栈,在防火墙/内网环境下等于直连失败。
-
https-proxy的值必须仍是http://开头(比如http://127.0.0.1:8080),填https://或省略协议头会静默失效 - 两条命令必须都执行:
composer config -g http-proxy http://127.0.0.1:8080和composer config -g https-proxy http://127.0.0.1:8080 - 验证是否生效:
composer config -g --list | grep -E "(http|https)-proxy",输出必须有两行且 URL 格式正确
http://user:pass@proxy 里密码含 @、/、: 怎么办
Composer 解析代理 URL 时,只认第一个 @ 为用户/密码分隔符,后面的内容全被截断。比如密码是 pa@ss/word,不编码就填成 http://user:pa@ss/word@127.0.0.1:8080,实际解析出的密码只有 pa,剩下部分被丢弃,最终报 Invalid URI supplied 或跳过代理。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须对用户名或密码单独做
rawurlencode()编码:用php -r "echo rawurlencode('pa@ss/word');"得到pa%40ss%2Fword - 完整地址写成:
http://user:pa%40ss%2Fword@127.0.0.1:8080 - 域名里带
@(如proxy@corp.com)同样要编码,否则一样解析失败
公司用 NTLM 代理(Windows 域环境)怎么办
Composer 原生完全不支持 NTLM 认证,设了任何 http-proxy 都会返回 407 Proxy Authentication Required 或 Unable to connect to http://repo.packagist.org——这不是配置写错,是协议层根本不通。
- 唯一可行解法:本地起中转代理,比如
cntlm或px,让它监听127.0.0.1:3128并处理 NTLM,再让 Composer 连这个地址 - 启动
cntlm后执行:composer config -g http-proxy http://127.0.0.1:3128和composer config -g https-proxy http://127.0.0.1:3128 - 临时验证是否是 NTLM 问题:
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,如果curl也报 407,说明中转层没配好
代理设好了还是卡住?快速定位链路断点
现象一致:“没报错、只是卡住”,但真实原因可能是代理进程未运行、端口填错、防火墙拦截,或代理本身没放行 packagist.org。
- 先确认代理服务是否真在运行:
netstat -tuln | grep :8080(Linux/macOS)或netstat -ano | findstr :8080(Windows) - 用
curl逐层测试:curl -x http://127.0.0.1:8080 -I https://packagist.org/packages.json,看是否能拿到 200 响应头 - 检查代理是否支持 HTTPS CONNECT 隧道:某些旧版 Squid 或配置不全的 Clash 默认不转发 CONNECT,需显式开启
- Windows 用户注意:
composer config -g写入的是%APPDATA%\Composer\config.json,若报Could not write to file,先检查该路径是否存在且可写
最常被忽略的点:不是代理地址写错了,而是 https-proxy 字段压根没设,或者设成了 https:// 协议——Composer 强制要求它也用 http://,这是硬编码逻辑,改不了。










