不使用requests模块调用Discord Webhook发消息遇403错误求解决
不用requests给Discord Webhook发消息(解决403 Forbidden问题)
嘿,你遇到的403错误其实是因为Discord的Webhook接口对请求格式有明确要求,你的代码漏掉了关键的请求头部信息,导致服务器直接拒绝了你的请求~
问题根源
Discord的Webhook端点需要两个核心请求头部:
Content-Type: application/json:必须告诉服务器你发送的是JSON格式的数据,不然它无法正确解析你的请求体- 可选但推荐的
User-Agent:避免被Discord的反拦截机制当成可疑请求屏蔽
你之前的代码只传递了JSON数据,但没设置这些头部,所以触发了403禁止访问。
修改后的可用代码
import urllib2 import json # 替换成你的Discord Webhook链接 webhook_url = '你的Webhook URL' # 构造符合Discord要求的消息内容 message_data = { "username": "Bot", "text": "This is a test message." } # 将Python字典转换为JSON字符串 json_data = json.dumps(message_data) # 创建请求对象 req = urllib2.Request(webhook_url, json_data) # 添加必须的Content-Type头部 req.add_header('Content-Type', 'application/json') # 添加一个常见的User-Agent,降低被拦截概率 req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36') try: # 发送请求并获取响应 response = urllib2.urlopen(req) response_content = response.read() print("消息发送成功!服务器响应:", response_content) except urllib2.HTTPError as e: print(f"请求失败,状态码: {e.code}") print(f"错误详情: {e.read()}")
额外注意事项
- 确保你的Webhook链接完全正确,没有拼写错误,也没有被服务器管理员删除或过期
- 如果还是出现403,可以尝试更换一个不同的User-Agent值,比如手机端的UA字符串
- Discord的Webhook还支持嵌入消息、@用户等复杂格式,你可以根据需求调整
message_data的结构
内容的提问来源于stack exchange,提问作者Fabulous Job
相关产品推荐
相关产品推荐

