快速结论:当把 OpenAI Python SDK 当成代理(尤其是把 base_url 指向 Portkey 等网关并依赖 default_headers 传递认证信息)来发起 Realtime 连接时,容易出现 extra_headers while using as proxy 相关的 header 处理问题,表现为 WebSocket 握手返回 401。优先排查 SDK 版本是否已支持在 Realtime 链路中转发 default_headers。
适用环境:Issue 中确认的环境:macOS 15.1.1、Python 3.9.6、OpenAI Python SDK v1.58.1,使用 Portkey(portkey.ai)作为网关,配合 AsyncOpenAI 与 Realtime API。修复版本为 3.16.2(GA Realtime client)。CUDA、显卡型号未在 Issue 中提及。
最快修复方案:升级 OpenAI Python SDK 到 3.16.2 或更高版本,改用 client.realtime.connect(...) 发起连接;该版本中 GA Realtime client 会转发 default_headers,且每次调用的 extra_headers 仍然优先生效。
注意事项:Realtime beta API 已于 2025-09-15 退役,老的 client.beta.realtime.connect(...) 写法不再属于受支持路径;若升级并改用 GA 客户端后网关仍拒绝请求,官方建议提供一份去掉凭据的最小复现,以便继续定位是网关侧还是 SDK 侧问题。
问题场景
用户把 OpenAI Python SDK 当作代理转发层使用:用 AsyncOpenAI 把 base_url 指向 Portkey 网关,并通过 default_headers=createHeaders(...) 承载认证信息(virtual key 等),再调用 Realtime 连接示例。问题发生在建立 Realtime WebSocket 连接的握手阶段,而不是普通的 HTTP 聊天补全请求。
报错原文
websockets.exceptions.InvalidStatus: server rejected WebSocket connection: HTTP 401
extra_headers while using as proxy
原因分析
最可能的原因是:Realtime 连接路径没有把客户端初始化时设置的 default_headers 一并带入 WebSocket 握手请求,导致网关(Portkey)在握手阶段拿不到认证信息,从而返回 401。Issue 正文中的判断是“default headers 未被 extra_headers 考虑”,即认证细节可能存在于默认 headers 中却未随 Realtime 请求发出。官方在评论中确认了这一点,并说明在 3.16.2 的 GA Realtime client 中 default_headers 会被转发。
环境排查
- 确认 OpenAI Python SDK 版本:Issue 中报错版本为 v1.58.1,修复版本为 3.16.2,请先核对当前是否为受支持的 GA 版本。
- 确认调用的是 GA 客户端
client.realtime.connect(...),而非已退役的client.beta.realtime.connect(...)。 - 确认
base_url指向的是 Portkey 网关地址,且网关侧确实依赖default_headers中的凭据完成认证。 - 确认 Python 版本(Issue 为 3.9.6)与依赖(websockets 等)是否能正常建立 WebSocket 连接。
- 如需与官方复现对齐,也可核对是否使用了 Issue 中列出的模型名
gpt-4o-realtime-preview-2024-10-01。
解决步骤
- 升级 OpenAI Python SDK 到 3.16.2 或更高版本,以获取会转发
default_headers的 GA Realtime client。 - 把连接代码从
client.beta.realtime.connect(...)切换到client.realtime.connect(...),因为 Realtime beta API 已退役。 - 保留
default_headers中携带的网关认证信息;如某次调用需要额外 header,继续使用extra_headers,其优先级高于默认 header。 - 重新运行 Issue 中的 Realtime 示例,先只发一次会话更新,观察握手是否还返回 401。
- 如果升级并改用 GA 客户端后网关仍然拒绝请求,按官方建议整理一份移除凭据后的最小复现,提交到 Issue 中继续排查。
验证方法
升级并改用 client.realtime.connect(...) 后重新发起连接:如果不再抛出 websockets.exceptions.InvalidStatus: server rejected WebSocket connection: HTTP 401,并且能够正常收到 response.text.delta、response.text.done、response.done 等事件,即说明默认 header 已正确随 Realtime 连接转发,问题解决。若依旧 401,则说明可能出在网关侧认证配置或复现代码本身。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


