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

使用Python requests调用Discord API获取服务器频道遇401未授权问题

问题:Discord API请求返回401 Unauthorized(Postman正常,Django视图失败)

我用Python的requests库调用Discord API获取服务器频道时,返回{'message': '401: Unauthorized', 'code': 0}错误。请求代码如下:

headers = {
   'Authorization': f'Bot {bot_access_token}'
}

channels_url = f'https://discord.com/api/v10/guilds/{server_id}/channels'
response = requests.get(channels_url, headers)

print(response.json()) # {'message': '401: Unauthorized', 'code': 0}

该请求在Postman中可正常运行,但在Django视图中调用时失败。我的机器人已加入目标服务器并拥有管理员权限,权限范围包含identify、guilds和bot。我尝试了多种User-Agent值(包括MyBotName、MyBotName/1.0以及Discord文档要求的DiscordBot ($url, $versionNumber)格式),问题仍未解决。


排查步骤与解决方案

  • 修正requests参数传递方式
    你的代码中requests.get(channels_url, headers)存在参数位置错误:requests.get的第二个参数是params,headers需要通过headers关键字参数传递。错误的传参导致Authorization头根本没被发送,这是最可能的原因。正确写法:

    response = requests.get(channels_url, headers=headers)
    
  • 验证Django环境中的token有效性
    确认bot_access_token在Django环境中没有被截断、转义或包含多余字符(比如环境变量存储时误加了引号,或settings文件里拼写错误)。Postman能正常运行说明token本身有效,重点排查Django中token的取值逻辑。

  • 排除Django中间件干扰
    部分Django中间件可能会修改或过滤出站请求的headers,比如安全类中间件。可以在独立Python脚本(非Django环境)中运行相同代码,若能成功则说明是中间件导致的问题,需针对性调整中间件配置。

  • 再次确认bot权限配置
    确保使用的是bot token而非用户OAuth2 access token;验证机器人的OAuth2授权已勾选bot权限,且在目标服务器中实际拥有查看频道等必要权限(管理员权限需确认已正确赋予)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:23:16