如何在浏览器控制台向Discord Webhook发消息?遇400错误求助
解决Discord Webhook POST 400(Invalid request origin/代码50067)问题
错误原因
这个错误是Discord的安全限制导致的:Discord Webhook不允许从浏览器环境(包括控制台)直接发起请求。浏览器会自动携带当前页面的Origin请求头,而Discord的Webhook接口会验证这个来源,拒绝非可信的浏览器端请求,以此防止Webhook链接被泄露后遭恶意滥用。
可行解决方案
1. 后端代理中转(推荐)
写一个简单的后端服务,由后端调用Discord Webhook,前端控制台请求自己的后端接口,绕过浏览器的Origin限制。
Node.js(Express)示例
const express = require('express'); const fetch = require('node-fetch'); const app = express(); app.use(express.json()); // 自定义接口,用于接收前端请求并转发到Discord app.post('/send-discord', async (req, res) => { try { const webhookUrl = '你的Discord Webhook完整链接'; const response = await fetch(webhookUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(req.body) }); if (response.ok) { res.status(200).send('消息发送成功'); } else { res.status(response.status).send('Discord返回错误'); } } catch (error) { res.status(500).send('服务端请求失败:' + error.message); } }); app.listen(3000, () => { console.log('代理服务运行在 http://localhost:3000'); });
然后在浏览器控制台请求这个代理接口:
fetch('http://localhost:3000/send-discord', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ content: '测试消息内容' }) }) .then(res => res.text()) .then(console.log);
2. 使用非浏览器工具直接测试
如果只是临时测试Webhook可用性,可以用命令行工具或API调试工具:
- curl命令:
curl -H "Content-Type: application/json" -d '{"content":"测试消息"}' https://discord.com/api/webhooks/[你的ID/TOKEN]
- Postman/Thunder Client:直接新建POST请求,设置
Content-Type: application/json,请求体填{"content":"测试消息"},发送到Webhook链接即可。
重要提醒
绝对不要在前端代码(包括控制台公开输入)中直接暴露Discord Webhook链接,一旦泄露,任何人都可以用它向你的频道发送垃圾消息,必须通过后端中转来隐藏链接。
内容的提问来源于stack exchange,提问作者power house 222
相关产品推荐
相关产品推荐

