Composer无“离线代理”概念,必须同时配置http-proxy和https-proxy(均以http://开头)才能走代理联网;缺一即HTTPS请求静默直连,导致卡在Loading repositories或cURL error 28。

Composer 没有“离线代理”这个概念——它要么联网(走代理或直连),要么彻底断网(COMPOSER_DISABLE_NETWORK=1)。所谓“局域网中转”,本质是让 Composer 通过一个本地可访问的 HTTP 代理服务,间接穿透到外网,而不是在无网络时工作。
为什么 http-proxy 单独配置一定失败
Composer 对 HTTP 和 HTTPS 请求完全分路:所有仓库(packagist.org、GitHub、GitLab)全量走 HTTPS,http-proxy 字段只管 HTTP 请求,HTTPS 必须由 https-proxy 字段触发 CONNECT 隧道。漏掉后者,等效于让全部元数据请求直连,结果就是卡在 Loading composer repositories 或报 cURL error 28,且无明确错误提示。
-
https-proxy的值协议头必须是http://,哪怕你的代理监听的是https://127.0.0.1:8443—— 填https://或不写协议头会静默失效 - 必须同时运行两条命令,缺一不可:
composer config -g http-proxy http://127.0.0.1:7890<br>composer config -g https-proxy http://127.0.0.1:7890
- 验证是否生效:
composer config -g --list | grep -E "(http|https)-proxy",输出必须有两行,且格式合规
公司 NTLM 代理必须加中转层
Composer 原生不支持 NTLM 认证,填了 http-proxy 也会直接返回 407 Proxy Authentication Required。这不是配置错,是协议不兼容。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Windows 推荐用
cntlm或px,让它们监听127.0.0.1:3128并处理 NTLM,再把 Composer 的两个 proxy 都指向http://127.0.0.1:3128 - 验证中转层是否跑通:
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,若也报 407,说明中转没配好 - 别指望
auth.json或http-basic能绕过——那是给私有仓库鉴权用的,和出站代理无关
代理配对了还是超时?别只盯 proxy 字段
代理只是链路一环,超时还可能卡在其他环节:
-
http.timeout默认仅 300 秒(5 分钟),弱网下极易触发;需同步运行:composer config -g http.timeout 600 - PHP 的
default_socket_timeout若低于你设的http.timeout(常见值是 60),会提前掐断连接;查它:php -i | grep default_socket_timeout - 代理进程本身是否在运行?防火墙是否放行本地端口?
netstat -ano | findstr :7890(Windows)或lsof -i :7890(Linux/macOS)可确认
真正容易被忽略的是:Composer 不读系统 HTTP_PROXY 环境变量,也不自动 fallback 到直连——它严格按配置字段路由。哪怕代理服务开着,只要 https-proxy 缺失或格式错,就等于没配。

















