如何正确调用Discord API发起Create DM请求?
错误原因
- 请求体格式错误:原代码将序列化后的JSON字符串嵌套在带
data键的字典中,实际Discord API要求请求体直接为包含recipient_id字段的JSON对象,服务器无法识别到正确参数返回400错误。 - 令牌格式问题:若使用机器人账号调用接口,
Authorization请求头需要添加Bot前缀,格式为Bot 你的实际令牌值,个人账户令牌不需要添加此前缀。 - API版本过旧:v6版本Discord API已停止维护,建议使用当前稳定的v10版本接口。
正确代码实现
推荐直接使用requests库内置的json参数,自动处理序列化和请求头配置:
import requests url = 'https://discord.com/api/v10/users/@me/channels' # 机器人令牌需要加Bot前缀,个人账户直接填token即可 token = 'Bot 你的实际令牌' body = { 'recipient_id': '123456789' } headers = { "Authorization": token } # 直接传json参数,requests会自动设置Content-Type为application/json r = requests.post(url, json=body, headers=headers) print(r.status_code) print(r.json())
如果需要手动序列化JSON,正确写法如下,不要嵌套多余的字典:
import requests import json url = 'https://discord.com/api/v10/users/@me/channels' token = 'Bot 你的实际令牌' body = { 'recipient_id': '123456789' } headers = { "Authorization": token, "Content-Type": "application/json" } # data参数直接传序列化后的JSON字符串即可,不要套额外的字典 r = requests.post(url, data=json.dumps(body), headers=headers) print(r.status_code) print(r.json())
内容的提问来源于stack exchange,提问作者Beknur Seydazim
相关产品推荐
相关产品推荐

