
Guzzle 是 PHP 生态最主流的 HTTP 客户端库,8.0.0 为重大破坏性更新,于 2026 年 7 月 20 日发布。
核心迭代方向为类型安全强化、异常体系细化、协议能力升级与安全边界加固,同步升级底层依赖 guzzlehttp/promises ^3.0、guzzlehttp/psr7 ^3.0。
Multiplexing::NONE 禁用模式,客户端、cURL 多句柄、请求选项三层均支持配置PERSISTENT_PREFER(优先复用连接)、PERSISTENT_REQUIRE(强制复用连接)request_factory/response_factory/stream_factory/uri_factory 四个请求选项,可注入自定义 PSR-17 工厂新增细分异常类,替代原有笼统的异常分类,错误定位更精准:
ConnectTimeoutException:连接阶段超时,继承自 ConnectExceptionNetworkException:无响应的底层网络故障NetworkTimeoutException:传输层无响应超时ResponseTransferException:响应传输异常,子类 ResponseTimeoutException 对应响应传输阶段超时ResponseException:存在响应体的请求失败HandlerClosedException:cURL 多句柄关闭后,待处理请求被拒绝时抛出#[\SensitiveParameter] 标记,PHP 8.2+ 环境下异常堆栈自动脱敏,避免密钥泄露ProxyOptions 类,统一代理选项解析逻辑FileCookieJar 持久化安全加固:改用 JSON 格式存储、限制文件为仅所有者可读、禁止原生 PHP 反序列化,防范安全风险close() 生命周期方法Pool 回调新增迭代器 key 参数传递declare(strict_types=1),类型一致性全面提升所有请求选项前置严格类型校验,非法值直接抛出异常,不再静默兼容:
SetCookie 类所有方法、公共属性新增原生类型声明Max-Age 属性而非 Expires__Secure-/__Host- 前缀 Cookie 规则,非安全连接直接拒绝接收 Secure Cookieno_proxy/NO_PROXY 环境变量读取逻辑完全对齐Referer 头仅保留源站信息,不再转发 auth 认证选项timeout 作为总传输截止时间,read_timeout 作为空闲超时,默认 60 秒default_socket_timeoutMultiplexing::WAIT 模式,等待连接就绪后再发送请求guzzlehttp/promises 版本约束升级为 ^3.0guzzlehttp/psr7 版本约束升级为 ^3.0Client::__call() 魔术方法,必须使用显式 HTTP 动词方法(get()/post() 等)或 request()/requestAsync()ClientInterface::getConfig(),仅保留 Client 具体类的 getConfig() 实现handler 请求选项,处理器必须在客户端初始化时统一配置GUZZLE_CURL_SELECT_TIMEOUT 环境变量,改用 CurlMultiHandler 的 select_timeout 构造选项CurlMultiHandler::$_mh 资源,cURL 多句柄配置必须通过构造参数传入Utils::jsonEncode()/jsonDecode()、RetryMiddleware::exponentialDelay()、RequestException::wrapException()、Utils::isHostInNoProxy() 等RequestException 中的响应访问能力,有响应的异常统一使用 ResponseExceptionguzzlehttp/psr7 2.x 或 guzzlehttp/promises 2.x,需同步升级适配版本RequestException 获取响应的代码,需改为捕获 ResponseException