结论是secure-http为true时composer强制拒绝http镜像源,直接抛transportexception;需改用https镜像(如https://mirrors.aliyun.com/composer/)并确保带composer类型标识和末尾斜杠,禁用secure-http仅作高危临时方案。

Composer install 报 “TransportException” 是 secure-http 拦截了 HTTP 镜像
直接结论:不是 Composer 坏了,是你配了 http:// 开头的镜像源,而 secure-http 默认为 true,它连试都不试,直接抛 Composer\Downloader\TransportException。
常见错误信息里含 Connection refused、cURL error 1 或明确提示 HTTP protocol is disabled,本质是协议被硬性拒绝,不是网络不通。
- 阿里云镜像必须写成
https://mirrors.aliyun.com/composer/(注意末尾斜杠和 HTTPS) - PHPChina 镜像应为
https://packagist.laravel-china.org,http://版本已失效多年 - 执行配置命令时必须带
composer类型标识:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 禁用
secure-http是高危操作:composer config -g secure-http false,仅限本地调试,CI 和生产环境严禁使用
HTTPS 镜像配置生效但依然报 TransportException?检查证书链和系统时间
换了 HTTPS 镜像还报错,大概率是 OpenSSL 校验证书失败,不是镜像问题。错误里若出现 certificate verify failed、SSL3_GET_SERVER_CERTIFICATE 或 unable to get local issuer certificate,就该查证书路径。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
php -r "print_r(openssl_get_cert_locations());",看default_cert_file指向哪;常见路径如/etc/ssl/certs/ca-certificates.crt(Linux)、/usr/local/etc/openssl/cert.pem(macOS) - 检查系统时间:
date,误差超过 5 分钟就会让证书“未生效”或“已过期”,直接触发校验失败 - Windows 下常因 PHP 未加载证书路径,需在
php.ini中显式设openssl.cafile="C:\php\cacert.pem" - 临时验证是否证书问题:
curl -v https://mirrors.aliyun.com/composer/,看卡在 * TLS handshake 还是 * Connected to
Composer 升级到 v2 后 TransportException 更频繁?锁文件与插件不兼容导致协议校验异常
v2 不再容忍旧锁文件和插件行为,某些插件(尤其自定义下载器或仓库适配器)可能绕过 secure-http 规则,或在解析 composer.lock 时误读仓库协议,引发看似随机的 TransportException。
-
composer self-update --2可能静默失败——检查which composer,若指向/usr/bin/composer,说明来自系统包管理器,需用官方脚本重装:php -r"copy('https://getcomposer.org/installer', 'composer-setup.php');"→ 校验 →sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer - 删掉
vendor/和composer.lock,再跑composer install;v2 的锁文件格式与 v1 不兼容,混用必报错 - 检查插件是否声明支持 v2:
composer show --plugin,输出中若含composer-plugin-api: ^2.0才安全;否则要升级或移除 - 项目级
repositories配置若含自定义 HTTP 地址(哪怕只是测试用),v2 会更严格校验,建议全转 HTTPS 或删掉
企业内网或代理环境下 TransportException 怎么定位?别信 diagnose,要直连验证
composer diagnose 在代理/中间人环境中基本无效——它走的是默认通道,不反映你实际使用的镜像或代理配置。真正卡点往往藏在 DNS 解析、SNI 拦截或证书替换里。
- 先绕过 Composer,用
curl -v https://mirrors.aliyun.com/composer/packages.json直测;若卡在* Connected to,是 DNS 或防火墙问题;若卡在* TLS handshake,是证书或 SNI 被篡改 - 强制走 IPv4:
CURL_IPRESOLVE=4 composer install(Linux/macOS),排除 IPv6 路由异常 - 确认代理配置正确:
composer config -g http-proxy输出应为http://ip:port(注意是http-proxy,不是https-proxy) - 若公司用了中间人代理,导出其根证书(如
company-ca.crt),再执行:composer config -g cafile /path/to/company-ca.crt
最易被忽略的是:v2 默认更激进地校验所有仓库协议一致性,哪怕你只在一个 repositories 里写了 HTTP 地址,它也可能污染整个安装流程;另外,composer.lock 里记录的原始仓库 URL 若是 HTTP,在 v2 下会被拒绝,哪怕你当前配置了 HTTPS 镜像——这个细节几乎没人主动检查。










