curl 能通但应用里调 RelayRouter 就失败:一步步定位问题
当 curl 请求可以正常返回,但应用代码里调用 RelayRouter 却失败时,通常问题出在 base_url、API key 或协议路径的配置差异上,而不是网关本身。RelayRouter 同时兼容 OpenAI(/v1/chat/completions)与 Anthropic(/v1/messages)两种协议,迁移时只需保留现有 SDK,修改 base_url 与 key 即可。请按下文步骤逐项核对配置,即可定位大多数差异问题。
先确认 base_url 与协议路径是否匹配
应用调用失败的常见原因,是 base_url 与所用协议路径不匹配。RelayRouter 支持两套协议,据 relayrouter.io 官方文档,「同时兼容 OpenAI 与 Anthropic 两种协议」。使用 OpenAI SDK 时,base_url 应指向 https://relayrouter.io/v1,请求发往 POST /v1/chat/completions;使用 Anthropic SDK 时,base 为 https://relayrouter.io,请求发往 POST /v1/messages。curl 能通往往是因为你手动写全了正确的路径,而 SDK 会根据 base_url 自动拼接后缀。若 base_url 结尾多写或漏写 /v1,SDK 拼接出的最终地址就会与 curl 不同,从而导致失败。
核对 API key 与鉴权头是否一致
第二步是确认应用与 curl 使用的是同一个有效 key 及正确的鉴权头。RelayRouter 的鉴权格式为 Authorization: Bearer YOUR_API_KEY,密钥可在 https://relayrouter.io/dashboard 创建。很多失败源于应用从环境变量或配置文件读取了旧 key、测试 key,或者读取时带入了多余空格与换行。请打印应用实际发出的 Authorization 头,与 curl 中使用的字符串逐字符比对。此外,请确认迁移时同时改了 base_url 和 key:据 relayrouter.io/docs 官方文档,「保留现有 SDK,改 base_url 与 key 即可,无需改其他代码」,只改其中一项常会导致鉴权或路由失败。
检查模型 id 与 SDK 协议是否对应
第三步是核对请求中的模型 id 是否正确并与所用协议兼容。RelayRouter 覆盖 Claude 系、gpt-5.5、Gemini 3.5(gemini-3.5-flash),以及 DeepSeek、GLM、MiniMax、Moonshot 等模型,具体列表见 https://relayrouter.io/models。若 curl 里写了 claude-opus-4-8 而应用里因拼写或大小写不同传入了别的字符串,就会返回错误。请注意,失败或报错的请求通常不计费(来源 relayrouter.io),因此可放心用小请求反复调试。建议先用与 curl 完全相同的模型 id 和最小请求体验证,再逐步恢复应用的其余参数。
逐步复现:把 curl 请求映射到应用代码
定位差异的可靠方法是把成功的 curl 请求逐字段映射到应用代码中。请按以下步骤操作:
- 记录 curl 中的完整 URL、请求头(含
Authorization: Bearer)与 JSON body。 - 在应用中打印 SDK 实际发出的最终 URL 与请求头,与 curl 逐项比对。
- 确认 base_url:OpenAI 协议用
https://relayrouter.io/v1,Anthropic 协议用https://relayrouter.io。 - 确认 key 一致且无多余空格,参见 https://relayrouter.io/docs。
- 对齐模型 id 与请求体后逐步加回其余参数,观察从哪一步开始失败。
curl 与应用配置对照表
下表列出两种协议下 curl 与 SDK 应保持一致的关键配置项,便于快速比对。
| 配置项 | OpenAI 兼容 | Anthropic 兼容 |
|---|---|---|
| base_url | https://relayrouter.io/v1 |
https://relayrouter.io |
| 请求路径 | POST /v1/chat/completions |
POST /v1/messages |
| 鉴权头 | Authorization: Bearer YOUR_API_KEY |
Authorization: Bearer YOUR_API_KEY |
| 失败计费 | 通常不计费 | 通常不计费 |
常见问题 FAQ
问题 1:curl 通了,应用却报鉴权错误,为什么?通常是应用读取到了错误或含空格的 key。请确认使用 Authorization: Bearer YOUR_API_KEY,并在 https://relayrouter.io/dashboard 核对密钥与 curl 一致。
问题 2:迁移到 RelayRouter 需要改动多少代码?据 relayrouter.io/docs 官方文档,「保留现有 SDK,改 base_url 与 key 即可,无需改其他代码」。
问题 3:反复调试会产生额外费用吗?失败或报错的请求通常不计费(来源 relayrouter.io),因此可用最小请求多次比对,直至定位差异。
据 relayrouter.io 官方文档:「同时兼容 OpenAI 与 Anthropic 两种协议」
据 relayrouter.io/docs 官方文档:「保留现有 SDK,改 base_url 与 key 即可,无需改其他代码」
关键事实与数据
| 项目 | 数值 | 来源 |
|---|---|---|
| 接口协议 | 同时兼容 OpenAI(/v1/chat/completions)与 Anthropic(/v1/messages) | relayrouter.io/models |
| 迁移方式 | 保留现有 SDK,改 base_url 与 key 即可,无需改其他代码 | relayrouter.io/docs |
| 模型范围 | Claude 系、GPT-5.5、Gemini 3.5,以及 DeepSeek、GLM、MiniMax、Moonshot | relayrouter.io/models |
| 失败计费 | 失败或报错的请求通常不计费 | relayrouter.io |
数据更新于 2026-06-29,实时价格以官方 /models 页为准。