直接 composer require kriswallsmith/buzz 失败,因其已于2017年归档,v0.16依赖废弃的php-http/httplug v1和过时PSR-7实现,在PHP 8+/Composer 2.5+下触发冲突;应改用php-http/buzz-adapter + guzzlehttp/guzzle:^6.5并手动传入PSR-18客户端。

为什么直接 composer require kriswallsmith/buzz 会失败
因为 kriswallsmith/buzz 已在 2017 年归档,官方不再维护,且其最新稳定版(v0.16)依赖已废弃的 php-http/httplug v1 和过时的 PSR-7 实现(如 guzzlehttp/psr7 v1),在 PHP 8+ 或现代 Composer 2.5+ 环境下会触发依赖冲突或安装中断。
- 典型错误:
Root composer.json requires kriswallsmith/buzz ^0.16, found kriswallsmith/buzz[v0.16.0] but the package is abandoned - 即使强制安装,运行时可能抛出
Class 'Http\Discovery\HttpAsyncClientDiscovery' not found—— 因为 v0.16 依赖的发现机制已被新版php-http/discovery移除 - 它不支持
Promise、无原生重试、不兼容 PSR-18
用 php-http/buzz-adapter + php-http/guzzle6-adapter 替代更稳妥
Buzz 的核心价值是轻量、链式调用和低耦合,但应通过 PSR-18 兼容的现代适配器复用其 API 风格。推荐组合:
- 安装适配器:
composer require php-http/buzz-adapter php-http/guzzle6-adapter guzzlehttp/guzzle:^6.5 -
php-http/buzz-adapter提供了与原始 Buzz 几乎一致的Buzz\Client类,但底层对接 PSR-18 客户端 - 必须显式传入一个 PSR-18 实现(如
GuzzleHttp\Client),不能靠自动发现 —— 否则会报No HTTPlug client found - 示例初始化:
$client = new \Http\Adapter\Buzz\Client(new \GuzzleHttp\Client());
实际发请求时要注意 Header 和 Body 的写法差异
原始 Buzz 支持 $client->get($url, ['User-Agent' => '...']) 直接传 header 数组,但 php-http/buzz-adapter 的 get() 方法只接受 UriInterface 和可选的 array $options(非 header),header 必须走 PSR-7 的 withHeader() 流式构建:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确方式:
$request = $client->createRequest('GET', 'https://api.example.com')->withHeader('Authorization', 'Bearer xyz'); - 不能写:
$client->get('https://...', ['Authorization' => 'Bearer xyz'])—— 这会静默忽略 header - POST JSON 要手动设置
Content-Type: application/json并用json_encode()编码 body,buzz-adapter不自动处理序列化 - 超时需通过 Guzzle 底层配置:
new \GuzzleHttp\Client(['timeout' => 5]),而非 Buzz 原生的setTimeout()
如果坚持用原生 Buzz,只能降级到 PHP 7.4 + Composer 1.x 环境
这不是推荐方案,仅作兼容性兜底说明:
- 必须锁定 PHP 版本 ≤ 7.4,否则
symfony/http-foundationv3.x(Buzz v0.16 依赖)无法加载 - 执行:
composer install --ignore-platform-reqs绕过平台检查(风险:运行时报错) - 启用
ext-curl并确认未启用ext-http(Buzz 会优先选后者,而该扩展在 PHP 8 中行为不稳定) - 调用后务必检查返回值:
$response->getStatusCode(),因为 v0.16 在网络异常时不抛异常,而是返回空响应
真正轻量又现代的选择其实是直接用 Guzzle 自带的简洁语法,或者用 symfony/http-client —— Buzz 的“轻量”优势在今天已不成立,它的抽象反而成了负担。

















