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

使用Discord API和Python Requests发送本地图片遇400错误求助

解决Discord API发送图片返回400错误的问题

问题根源

你遇到的400错误是请求格式冲突导致的:

  • 同时使用json=data和files参数时,requests会自动将请求转为multipart/form-data格式,但你手动设置了Content-Type: application/json,两种格式冲突引发错误。
  • 带文件的消息不能通过json参数传递内容,必须用data参数提交。

修正步骤

  1. 移除手动设置的Content-Type
    requests发送带文件的请求时,会自动生成正确的multipart/form-data请求头,无需手动指定。

  2. 替换json=data为data=data
    将消息内容放在data参数中,而非json参数,适配文件上传的请求格式。

  3. 安全处理文件流
    使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:05:08