OpenAI Python SDK 准备换掉 HTTPX,最容易出问题的是证书和测试
OpenAI 官方 openai-python 仓库主分支新增了 HTTPX2 迁移说明,文档写明 SDK 的同步和异步 HTTP 客户端将使用 HTTPX2,安装 openai 时自动安装 HTTPX2,不再把旧版 httpx 和 certifi 作为传递依赖。HTTPX2 项目由 Pydantic 团队维护,定位为
作者:林岚|OC 开发者生态编辑
OpenAI 官方 openai-python 仓库主分支新增了 HTTPX2 迁移说明,文档写明 SDK 的同步和异步 HTTP 客户端将使用 HTTPX2,安装 openai 时自动安装 HTTPX2,不再把旧版 httpx 和 certifi 作为传递依赖。HTTPX2 项目由 Pydantic 团队维护,定位为下一代 Python HTTP 客户端。
一句话结论:普通 API 调用大多不需要改代码,真正需要提前检查的是最小化容器的 CA 证书、企业代理、自定义 Transport、监控钩子和依赖 HTTPX 的测试工具。
先说明版本边界:这份变化目前来自 OpenAI 官方 GitHub 仓库主分支的迁移文档,OpenAI Docs 尚未提供同主题的正式发布说明。生产团队应以自己实际安装版本的发行说明和依赖锁文件为准,不要只看到主分支文件就假定所有环境已经切换。
如果应用只是创建 OpenAI() 或 AsyncOpenAI(),然后调用 Responses、流式输出或其他标准 SDK 接口,迁移文档称现有调用、重试、数值超时和解析后的响应模型保持不变。破坏性变化主要出现在 SDK 与网络层的接缝处。

第一处是 TLS 信任库。旧 HTTPX 默认使用 certifi 提供的 CA 包;HTTPX2 改为操作系统信任库。这对完整桌面系统通常更自然,也更容易继承企业安装的根证书,但精简容器镜像可能根本没有系统 CA,依赖修改过的 certifi 或企业 TLS 检查代理的环境也可能突然出现证书验证失败。迁移文档建议安装系统 CA,或通过 SSL_CERT_FILE、SSL_CERT_DIR 和显式 SSLContext 配置信任来源。
第二处是自定义客户端。原来的 httpx.Client、Timeout、URL、Limits 和 Transport 类型,需要替换为 httpx2 对应对象。SDK 提供 DefaultHttpx2Client 与异步版本来保留推荐的超时、连接池和重定向默认值,但自定义认证、事件钩子、代理、链路追踪和连接池监控都必须确认是否支持新的对象类型。
第三处是测试。若测试套件使用 MockTransport 或 RESPX 拦截 HTTPX 请求,只会补丁旧 HTTPX 的版本无法截获 HTTPX2 客户端。官方迁移文档保留了临时逃生通道:显式安装旧 httpx,再把旧客户端注入 SDK;但这条路径需要类型转换,而且被明确描述为迁移辅助方案,不应成为新的长期默认。
还有一个容易忽略的依赖问题:一些项目并没有在自己的依赖文件里声明 httpx,只是过去因为安装 OpenAI SDK 顺带获得了它。SDK 不再传递安装旧 HTTPX 后,这些项目自己的 import httpx 会失败。依赖锁定工具能帮助发现差异,但最终还是要把直接依赖写成直接依赖。
关键事实
- 信息来源:OpenAI 官方
openai-python仓库主分支迁移文档 - 默认调用:标准 SDK 接口预计不需要修改
- 主要变化:系统 CA 信任库、HTTPX2 类型、自定义 Transport、测试拦截
- 版本提醒:生产环境应以实际 SDK 版本和发行说明为准
OC 判断
这不是 API 语义的大迁移,而是底层网络依赖的替换。越是“标准用法”的项目,影响越小;越是有企业代理、特殊证书、网络观测和复杂 Mock 的项目,越需要提前建立迁移矩阵。依赖升级最危险的地方,通常不是示例代码里的那一行请求。
为什么重要
- 对开发者:检查是否直接使用 HTTPX 类型,以及是否误把传递依赖当成直接依赖。
- 对运维团队:最小化容器和企业 TLS 代理需要验证系统 CA 配置。
- 对测试团队:请求 Mock、认证钩子和链路追踪工具可能需要升级兼容版本。
评论
围绕这篇文章补充信息、提出问题或分享观察。