在Discord官网控制台使用Webhook时出现POST 400错误
问题原因及解决办法
核心原因
- Discord内容安全策略(CSP)收紧:现在Discord官网页面的安全规则已经禁止在其页面环境内直接发起Webhook请求,以此防范恶意脚本滥用Webhook功能,这是导致请求被拦截返回400的主要原因。
- 自动携带的认证信息冲突:在Discord官网控制台运行代码时,浏览器会自动带上当前登录账号的Cookie等认证信息,但Webhook请求本身不需要用户认证,多余的认证头会被Discord API判定为非法请求。
- 旧域名兼容性问题:你代码里使用的
discordapp.com是Discord的旧域名,虽然部分场景仍能使用,但官方现在推荐使用discord.com,旧域名可能存在隐性的兼容性问题。
解决办法
- 放弃在Discord官网控制台运行:Webhook的设计初衷是供后端服务、本地脚本或非Discord环境调用,Discord的安全策略已经不允许在自身页面内执行这类请求,回到本地环境运行代码就能恢复正常。
- 临时测试用的请求配置修改:如果非要在控制台测试,可以用
fetch并配置不发送Cookie,避免认证信息冲突,代码示例:
async function sendMessage() { const webhookUrl = "https://discord.com/api/webhooks/你的真实WebhookID/你的真实Token"; const params = { username: "My Webhook Name", avatar_url: "", content: "The message to send" }; try { const response = await fetch(webhookUrl, { method: "POST", headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(params), credentials: 'omit' // 关键配置:不发送当前登录的Cookie }); console.log(response.status); } catch (err) { console.error(err); } } sendMessage();
- 替换为官方推荐域名:把代码里的
discordapp.com替换成discord.com,消除旧域名的兼容性隐患。
内容的提问来源于stack exchange,提问作者BlueSchnabeltier
相关产品推荐
相关产品推荐

