最让人抓狂的接口错误是什么?
不是 500,不是超时,而是——
401 Unauthorized:你被拒绝了,但它不告诉你为什么。
不少人在调用 DeepSeek API 时都会遇到这个问题:
- 请求能发出去
- 网络正常
- 返回却是
401 Unauthorized - 换语言、换 SDK 还是 401
这篇文章不讲废话,直接给你 最常见的 8 类原因 + 正确排查顺序,照着查,基本都能定位。
一、先确认一件事:401 在 DeepSeek 里意味着什么?
在 DeepSeek 接口语义中,401 Unauthorized 基本只指一件事:
你的身份信息不被认可
它不代表接口不存在,也不代表参数错误,而是:
- API Key 不对
- 权限不对
- 或者你“看起来不像一个合法调用者”
二、最常见的 8 个 401 原因(按踩坑概率)
1️⃣ API Key 填错 / 复制不完整(最多)
最常见的低级错误,但真的很多人中。
常见情况:
- 少复制了一位
- 多了空格 / 换行
- 复制了测试 Key,用在正式环境
👉 DeepSeek 不会告诉你 Key 错,只会 401
✅ 建议排查:
var_dump($apiKey);
确认长度、前后是否有空格。
2️⃣ Authorization Header 写法不对(非常高频)
DeepSeek 接口 必须使用 Bearer 方式。
❌ 错误写法:
Authorization: sk-xxxxx
✅ 正确写法:
Authorization: Bearer sk-xxxxx
👉 少一个 Bearer,直接 401。
3️⃣ Header 名大小写 / 拼写错误
HTTP Header 虽然不区分大小写,但有些封装库会出问题。
常见错误:
authoriztion: Bearer xxx
👉 拼错一个字母,直接 401。
4️⃣ 请求地址写错(但你以为是权限问题)
比如:
- 用了旧版本接口地址
- 把 v1 写成 v0
- 使用了不支持该模型的 endpoint
👉 接口存在,但你没权限访问这个路径
DeepSeek 返回:401
5️⃣ 账号未开通 / Key 已被禁用
常见于:
- 新注册账号
- Key 刚创建
- 账户未完成必要验证
- Key 被手动禁用
👉 接口层面统一返回 401。
6️⃣ 请求方式错误(GET / POST 用错)
部分接口只接受:
POST
你却用:
GET
👉 DeepSeek 会直接判定为非法请求,返回 401。
7️⃣ 请求体格式不合法(但你以为是参数问题)
比如:
- Body 不是 JSON
- JSON 有语法错误
- Content-Type 没写
Content-Type: application/json
👉 有时会被直接当成非法请求处理,返回 401。
8️⃣ 使用代理 / 中转服务器导致 Header 丢失(隐蔽)
如果你是这样架构的:
前端 → 自己服务器 → DeepSeek API
中间层如果:
- 没把 Authorization 透传
- 被 Nginx / 网关过滤
👉 你以为传了 Key,实际上没传
DeepSeek 只能返回 401。
三、一个标准的 DeepSeek 正确请求示例(PHP)
$ch = curl_init("https://api.deepseek.com/v1/chat/completions");
$headers = [
"Content-Type: application/json",
"Authorization: Bearer YOUR_API_KEY"
];
$data = [
"model" => "deepseek-chat",
"messages" => [
["role" => "user", "content" => "Hello"]
]
];
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => json_encode($data),
]);
$res = curl_exec($ch);
if ($res === false) {
echo curl_error($ch);
}
👉 对照这个结构,一项一项比
四、排查 401 的正确顺序(非常重要)
遇到 401,不要乱试,按顺序:
1️⃣ 打印完整请求 Header
2️⃣ 确认 Authorization 是否真的发出
3️⃣ 对比官方接口地址
4️⃣ 确认 Key 状态是否可用
5️⃣ 确认请求方式和 Body
👉 80% 的问题在前 3 步
五、一个老坑经验(很重要)
401 ≠ 你没权限,
很多时候只是“你不像官方期望的请求”。
DeepSeek 对请求结构、Header 要求是偏严格的,
和一些“宽松 API”不一样。