Cherry Studio 连接失败 403 status code no body 怎么排查?
简答:Cherry Studio 显示“403 status code no body”,表示服务端理解了请求但拒绝处理;优先核对 Base URL、请求路径、API Key、模型 ID 和代理出口。不要反复发送同一请求,也不要把完整 /chat/completions 路径填进只需要 Base URL 的字段。
定义:“403 status code no body”是 Cherry Studio 收到 HTTP 403 但没有可显示的响应正文,通常只能通过实际请求 URL、模型、响应头和客户端日志继续判断拒绝发生在哪里。
先看这张表:403 到底该查什么
HTTP 403 表示服务器理解了请求,但拒绝处理;与 401 不同,单纯重新认证不一定能解决,重复发送完全相同的请求也可能继续失败。可先参考 MDN 对 403 Forbidden 的定义。
| 现象 | 优先检查 | 成功判定 |
|---|---|---|
| 连接检查直接 403 | 服务商类型、Base URL、API Key、选中的模型 | 连接检查返回正常响应,或能显示明确的模型错误 |
| 模型列表为空,但手动聊天可用 | 模型列表接口是否受支持;模型 ID 是否需要手动添加 | 手动添加精确模型 ID 后可以发起短文本对话 |
| 普通聊天可用,Agent 或工具 403 | Agent 使用的模型、代理链路、工具权限和客户端版本 | 普通聊天与目标 Agent 分别完成最小测试 |
| 所有请求都 403 且无正文 | Key 状态、账户权限、地区或出口 IP、服务方侧日志 | 服务方能根据时间和请求信息定位服务端拒绝原因 |
Cherry Studio 官方排错文档也将 403 的首要检查方向归为账号、地区、模型或组织权限,同时提醒 404 更常见于地址、路径或模型 ID 问题。参见 Cherry Studio Troubleshooting。
第一步:确认 Cherry Studio 中的五个字段
- 服务商类型:如果接口宣称兼容 OpenAI,应选择 OpenAI 兼容类型,而不是 Claude 原生、Gemini 原生或其他专用类型。
- API Base URL:只填写当前服务方文档明确给出的 Base URL。不要自行猜测域名,也不要把网页入口当成 API 地址。
- API Key:在 Cherry Studio 中重新保存一枚当前账户可用的标准 API Key。检查时只确认非空,不要把 Key 粘贴到文章、截图或公共工单。
- 模型 ID:填写服务方当前账户页面或模型目录中的精确 ID。模型显示在下拉列表里,不等于当前 Key 一定拥有调用权限。
- 默认模型:确认服务商已启用,并且当前聊天或 Agent 实际选中了该服务商下的模型。
对于目标中的 runapi.cfd,本文无法从公开资料核实当前 Cherry Studio 专用 Base URL、模型分组和鉴权权限,因此不直接猜测具体地址。请以你当前账户页面和对应文档为准;如果同时看到其他相似域名,二者关系未从公开资料确认,不要交叉使用密钥、文档或价格信息。
尤其注意路径层级:如果 Cherry Studio 的字段要求 Base URL,就不要填完整的 /chat/completions 操作地址。官方的 Cherry Studio 接入说明也强调,自定义 OpenAI 服务商应填写兼容接口的 Base URL,由客户端继续拼接请求路径;具体域名和版本前缀必须以当前服务文档为准,可参考 Cherry Studio 的 OpenAI 兼容配置说明。
第二步:用最小请求区分 Key、模型和路径问题
先关闭附件、长对话、图片、工具和 Agent,只保留一个模型与一句短提示词。Cherry Studio 官方排错建议也是先用不带附件的短消息缩小问题范围。
# macOS / Linux:只把值放入环境变量,不要把真实 Key 写进命令历史
export API_KEY='在本机安全输入的Key'
export BASE_URL='从当前服务文档复制的Base URL'
export MODEL_ID='从当前账户模型列表复制的精确模型ID'
curl "$BASE_URL/chat/completions" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d "{\"model\":\"$MODEL_ID\",\"messages\":[{\"role\":\"user\",\"content\":\"Reply with the word connected.\"}],\"stream\":false}"这条命令只是通用的 OpenAI 兼容接口测试模板,不代表 runapi.cfd 当前一定使用该路径。若服务文档给出的 Base URL 已经包含版本前缀,例如 /v1,通常只在后面接操作路径;不要再重复添加版本前缀。若文档要求其他最终路径,应以文档为准。
- 命令返回 401:优先检查 Key 是否为空、过期、复制错误或不属于当前服务入口。
- 命令返回 403:请求已经到达某个服务端,但账户、模型、地区、组织或出口权限仍可能不满足。
- 命令返回 404:重点检查 Base URL、版本前缀、重复路径和模型 ID。
- 命令超时或无法建立连接:先检查网络与 Cherry Studio 代理,不要先改模型参数。
- 命令成功但 Cherry Studio 失败:重点比较客户端实际请求 URL、模型名、代理和请求体。
第三步:检查代理模式和出口是否真的生效
Cherry Studio 的代理设置位于 Settings → General。官方文档列出了 System proxy、Custom proxy 和 No proxy 三种模式,并说明 API 请求失败或超时时应优先检查代理配置。参见 Cherry Studio General 设置说明。
- 如果本机依赖系统代理,先选择 System proxy,再重新发起一次短文本请求。
- 如果使用自定义代理,确认协议、主机、端口和绕过规则没有填错;不要把代理地址误填成 API Base URL。
- 如果选择 No proxy,只有在你确认目标接口可直连时才使用。
- 分别测试普通聊天和 Agent。不同功能可能使用不同的请求链路;普通聊天成功,不代表 Agent、工具或 MCP 一定沿用相同代理。
- 每次只改一个变量,并记录修改前后的时间、模型和状态码。
如果你遇到的是 Agent 专用请求失败,可以查看 Cherry Studio 项目中关于 Agent 代理链路的公开问题记录;该记录说明不同功能链路可能出现代理行为差异,但不能据此推断你的具体账户或当前版本一定存在同样问题。参见 Cherry Studio Issue #13833。
第四步:打开开发者工具,确认“空响应”发生在哪一层
“no body”只说明界面没有显示响应正文,不等于没有诊断信息。Cherry Studio 官方文档建议在客户端窗口获得焦点后打开开发者工具:Windows/Linux 使用 Ctrl + Shift + I,macOS 使用 Command + Option + I;然后进入 Network,在测试或发起对话后查看失败的 completions 请求及其 Response。具体步骤见 Cherry Studio Common Issues。
重点记录以下字段:
- 请求 URL:确认是否误把网页地址当成 API 地址,或重复拼接了版本前缀。
- 请求方法:确认是否为服务方文档要求的接口类型。
- 请求模型:确认 Cherry Studio 实际发送的模型 ID,而不是你以为选中的名称。
- 状态码与响应头:保留时间、状态码、Content-Type、Request ID 等非敏感信息。
- 客户端版本与操作系统:版本差异可能影响代理、Agent 或流式请求行为。
分享日志前必须遮盖 Authorization、API Key、Cookie、代理认证信息、完整请求体中的隐私内容。只提供脱敏后的时间、模型、路径、状态码和错误现象,足够让服务方检索日志即可。
最后按失败分支处理,不要同时改五项配置
- 只有一个模型 403:先换成账户页面明确开放的另一个文本模型;如果其他模型成功,问题更接近模型权限或分组,而不是 Cherry Studio 基础连接。
- 所有模型都 403:重新核对 Key 所属入口、账户状态、地区或出口 IP,并把请求时间和脱敏后的 Request ID 提交给服务方核查。
- 模型同步失败但聊天成功:不要把“模型列表为空”直接判断为接口不可用。Cherry Studio 文档说明模型列表接口与聊天接口可能分离,可手动添加精确模型 ID。
- 普通聊天成功、Agent 失败:先暂时关闭工具和 MCP,使用同一模型发送短文本,再检查 Agent 的代理、工具绑定和权限。
- 403 随后变成 404:说明你可能已经绕过了权限层,但请求路径或模型 ID仍不正确;重新对照当前文档,不要继续盲目改 Key。
- 始终没有响应正文:保留客户端版本、请求时间、模型、最终 URL、状态码和响应头,联系对应服务方确认服务端日志。公开资料无法确认 runapi.cfd 当前是否提供 Cherry Studio 专用排错接口,因此不要根据相似域名文档猜测结论。
完成一项修改后,再用同一模型、同一句短提示词重试。这样才能判断到底是字段、权限、代理还是功能链路发生了变化。
本文解决什么,不解决什么
本文解决的是 Cherry Studio 接入 OpenAI 兼容 API 后出现 403、status code、no body 时的通用定位方法,包括字段核对、最小请求、代理检查和开发者工具取证。
本文不替你确认 runapi.cfd 当前有效的 API 地址、模型目录、账户额度、模型分组或实时服务状态;这些信息可能随账户和服务文档变化,必须以当前账户页面和服务方文档为准。
如果你只想先恢复一次最小连接,可按这个顺序执行:新建或确认 OpenAI 类型服务商 → 填入当前文档中的 Base URL → 保存非空 API Key → 手动添加精确模型 ID → 关闭附件和工具 → 使用短文本测试 → 再查看 Network 中的最终请求 URL。
常见问题
Cherry Studio 显示 403 status code no body,是 API Key 错了吗?
不一定。403 表示服务端拒绝处理请求,原因还可能包括模型未开放、账户或组织权限、地区或出口 IP、代理链路以及客户端实际请求路径。先在 Network 中确认最终 URL、模型 ID 和响应头,再判断是否需要更换 Key。
Base URL 应该填到 /chat/completions 吗?
通常不应把完整操作路径填入只要求 Base URL 的字段。应复制当前服务文档给出的 Base URL,再让 Cherry Studio 生成最终请求路径;如果文档明确要求其他格式,以文档为准,不能自行猜测或重复添加 /v1。
模型列表同步失败,但 Cherry Studio 可以聊天,算接口坏了吗?
不一定。模型列表接口和聊天接口可能是分开的,某些服务只支持聊天调用。可以从当前账户页面复制精确模型 ID,手动添加并直接发送短文本测试。
为什么普通聊天成功,Agent 或 MCP 却返回 403?
不同功能可能使用不同的模型、代理链路或权限。先关闭工具和 MCP,用同一模型做普通聊天测试,再单独检查 Agent 的代理、工具绑定、模型能力和客户端版本。
403 没有响应正文时,应该把什么日志发给服务方?
提供客户端版本、操作系统、请求时间、状态码、脱敏后的最终请求路径、模型 ID 和非敏感响应头。必须遮盖 API Key、Authorization、Cookie、代理认证信息和隐私内容,不要上传完整请求日志。
相关阅读
参考资料
- Cherry Studio Troubleshooting(cherryai.com)
- Cherry Studio General 设置说明(cherryai.com)
- Cherry Studio Common Issues(cherryai.com)
- MDN:403 Forbidden
- Cherry Studio Issue #13833:Agent 代理链路问题
- Cherry Studio OpenAI 兼容配置说明(runapi.ai)
