Discord Webhook Multipart请求报cannot send empty message错误
Discord Webhook multipart请求返回50006空消息错误解决方案
Discord对multipart/form-data格式校验极严,只要格式存在细微不符合规范的问题,就不会返回具体格式错误,直接抛出Cannot send an empty message的50006错误,你遇到的问题本质是请求体格式不符合multipart规范,和传参内容无关。
快速验证修复
你贴的Postman生成请求有个典型格式错误:multipart规范要求每个分片的头部和实际内容之间必须留一个空行(CRLF换行),旧版本Postman自动生成的form-data请求经常漏这个换行,直接导致服务端读不到分片内容。
你可以直接在Postman里选raw模式,手动粘贴下面的最小可用请求,把webhook-id替换成你自己的,发送即可正常返回204成功:
POST /api/webhooks/<webhook-id> HTTP/1.1 Host: discord.com Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW ------WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="content" Hello World! ------WebKitFormBoundary7MA4YWxkTrZu0gW--
不要用Postman自带的form-data表单构造功能生成请求,先手动跑通格式再排查代码问题。
传参规则
- 如果要同时发消息和附件,所有消息字段(content、embeds、按钮组件等)必须全部放在
payload_json分片里,不能单独传content、embeds这类独立分片,否则会出现参数识别冲突。 - 附件分片必须指定
filename参数,分片name按顺序写为files[0]、files[1],和payload_json里的attachments字段一一对应。
带附件的正确请求格式参考:
POST /api/webhooks/<webhook-id> HTTP/1.1 Host: discord.com Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW ------WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="payload_json" {"content":"测试带附件的消息"} ------WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="files[0]"; filename="test.txt" Content-Type: text/plain 测试文件的文本内容 ------WebKitFormBoundary7MA4YWxkTrZu0gW--
Java实现避坑
- 绝对不要手动拼接multipart请求体,手动拼接很容易漏换行、写错边界标识、算错Content-Length。JDK11+可以直接用自带HttpClient的MultipartBodyPublisher构造请求,低版本用OkHttp、Apache HttpClient这类成熟库的multipart构造工具,自动处理所有格式细节。
- 不要给普通文本分片加
Content-Transfer-Encoding这类非必要头部,Discord解析到冗余头部会直接跳过对应分片。 - 最后一个边界线末尾必须加两个短横
--作为结束标识,缺了这个标识服务端会认为请求体不完整,判定为空消息。 - 如果手动设置Content-Length头,必须把所有换行、边界线的字节长度算进去,长度不对会导致请求体被截断,同样返回50006错误。
内容的提问来源于stack exchange,提问作者RcCookie
相关产品推荐
相关产品推荐

