使用Discord API和Python Requests发送本地图片遇400错误求助
解决Discord API发送图片返回400错误的问题
问题根源
你遇到的400错误是请求格式冲突导致的:
- 同时使用
json=data和files参数时,requests会自动将请求转为multipart/form-data格式,但你手动设置了Content-Type: application/json,两种格式冲突引发错误。 - 带文件的消息不能通过
json参数传递内容,必须用data参数提交。
修正步骤
移除手动设置的Content-Type
requests发送带文件的请求时,会自动生成正确的multipart/form-data请求头,无需手动指定。替换
json=data为data=data
将消息内容放在data参数中,而非json参数,适配文件上传的请求格式。安全处理文件流
使用with语句打开文件,避免文件资源泄漏。
修正后的代码
import requests # 注意TOKEN格式必须是 "Bot 你的令牌" headers = {'authorization': 'Bot ' + TOKEN} url = f"https://discord.com/api/v9/channels/{CHANNEL}/messages" message_content = "你的消息内容" with open('image.png', 'rb') as image_file: data = {"content": message_content} # 明确指定文件名和MIME类型,避免识别错误 files = {'file': ('image.png', image_file, 'image/png')} r = requests.post(url, headers=headers, data=data, files=files) if r.status_code == 200: print(f"消息已发送到频道 {CHANNEL} {r}") else: # 打印响应文本,查看Discord返回的具体错误详情 print(f"发送失败到频道 {CHANNEL} {r}") print(r.text)
额外检查点
- TOKEN格式:必须以
Bot开头(注意空格),比如Bot XXXXXXX,缺少前缀会导致权限验证失败。 - 频道ID有效性:确认CHANNEL是文本频道的ID,语音频道或其他类型频道无法接收消息。
- 文件路径:确保
image.png在当前脚本的工作目录下,或者使用绝对路径(如C:/images/image.png)。
内容的提问来源于stack exchange,提问作者Bonkinan
相关产品推荐
相关产品推荐

