You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Speech and Debate API遇401 Unauthorized错误求排查方案

401 Unauthorized错误排查思路

针对你遇到的代码调用API返回401,但浏览器访问正常的问题,可以按以下步骤排查:

1. 核对Token的有效性与格式

  • 确认token是否一致且未过期:对比浏览器请求时用的token,和代码中传入的token参数是否完全相同,检查token有没有超过API文档中说明的有效期。
  • 校验Authorization头格式:代码中拼接的"Bearer " & token要确保格式准确——Bearer后面必须是单个空格,且token前后没有多余的换行、空格或特殊字符。可以直接打印拼接后的完整字符串,和浏览器请求头里的Authorization内容逐字符对比。

2. 补全请求头,对齐浏览器请求

浏览器访问API时会自动携带一些默认请求头,部分API会校验这些字段,代码中缺失就会触发401:

  • 用浏览器F12抓包,查看请求该接口时的所有请求头(比如User-Agent、Referer等),在代码中把这些关键头也加上,例如:
    client.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
    

3. 检查URL与参数的正确性

  • 对比浏览器实际请求的URL和代码生成的searchUrl,确认参数(比如type=schools)没有遗漏或拼写错误。
  • 验证schoolName的URL编码:确保HttpUtility.UrlEncode采用的编码(默认UTF-8)和浏览器一致,避免因编码差异导致API无法识别参数,间接返回401。

4. 深挖WebException的详细错误信息

代码中仅捕获了异常的Message,很多API会在401响应体里返回具体错误原因(比如token无效、权限不足),可以修改异常捕获逻辑获取详情:

Catch ex As WebException
    If ex.Response IsNot Nothing Then
        Using reader As New StreamReader(ex.Response.GetResponseStream())
            Dim errorDetails = reader.ReadToEnd()
            Console.WriteLine($"错误详情: {errorDetails}")
        End Using
    End If
    Console.WriteLine($"网络请求错误: {ex.Message}")
    Return Nothing

5. 确认API权限与Token获取流程

  • 检查获取token的账号:确保代码中通过sessions接口获取token的账号,和浏览器访问时用的账号是同一个,且该账号拥有访问v2/search接口的权限。
  • 核对token获取过程:确认调用sessions接口时,请求参数(账号、密码等)是否正确,返回的token是否被完整提取,有没有截断或多取字符的情况。

内容的提问来源于stack exchange,提问作者Jason Shoulders

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:02:40