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

如何用Python的urllib3通过Discord Webhooks发送带内嵌图片的Embed消息

解决Discord Webhook内嵌图片的urllib3实现问题

问题核心

你需要用urllib3发送带内嵌图片的Discord Embed,当前遇到的问题:

  • 纯JSON请求能发送Embed标题和描述,但无法加载本地图片
  • 尝试添加attachments参数后仍无法显示图片
  • 能发送图片附件,但无法将其嵌入到Embed中

关键原理

要同时发送Embed配置和本地图片,必须使用multipart/form-data格式构造请求:

  1. 将Embed的JSON配置放在payload_json字段中
  2. 将图片文件作为单独的文件字段上传
  3. Embed里的image.url通过attachment://文件名关联上传的文件

正确实现代码

import urllib3
import json

WEBHOOK_URL = "你的Discord Webhook地址"

# 初始化urllib3连接池
http = urllib3.PoolManager()

with open("image.jpg", "rb") as f:
    image_data = f.read()

# 构造Embed的JSON配置
payload_json = json.dumps({
    "content": "Hello World",
    "embeds": [
        {
            "title": "Image Name",
            "description": "Image Description",
            "image": {
                "url": "attachment://image.jpg"  # 与上传的文件名保持一致
            }
        }
    ]
})

# 构造multipart请求的字段集合
fields = {
    "payload_json": payload_json,
    "file": ("image.jpg", image_data, "image/jpeg")  # 文件名、二进制数据、MIME类型
}

# 发送POST请求
response = http.request(
    "POST",
    WEBHOOK_URL,
    fields=fields,
    timeout=urllib3.Timeout(10)
)

print(response.data.decode('utf-8'))

错误原因解析

  1. 纯JSON请求(第一种代码):

    • 使用application/json请求头只能传输文本数据,无法携带文件,Discord找不到attachment://image.jpg对应的文件资源,因此图片无法显示。
  2. 错误的multipart请求(第二种代码):

    • 虽然设置了multipart/form-data头,但直接将JSON字符串作为请求体发送,没有将图片文件加入请求体中,Discord仅收到JSON配置,未收到图片文件,导致关联失败。
  3. 仅发送附件(第三种代码):

    • 仅传递了文件和content字段,未在payload_json中定义Embed并关联图片,因此图片只会以普通附件形式展示,无法嵌入到Embed中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:43:23