Discord Webhook消息编辑请求返回400 (Bad Request) 问题问询
问题触发原因
- 接口请求格式不匹配:Discord webhook消息编辑接口要求请求体为
application/json格式,你当前使用urlencode编码的application/x-www-form-urlencoded格式提交,首次编辑时如果内容无特殊字符可能被兼容解析,后续内容出现换行、特殊符号时就会触发参数校验失败返回400。 - 编码规则错误:你当前使用
ascii编码请求内容,只要readme.txt中出现中文、emoji、特殊符号等非ASCII字符,就会出现编码异常或提交内容不符合要求,触发400错误。 - 缺少速率限制逻辑:你的循环没有设置等待间隔,文件一旦出现变动会立即高频发起请求,很容易触发Discord webhook的速率限制规则,导致请求被拦截。
注:Discord官方不存在单条webhook消息仅允许编辑一次的规则,该猜测不成立。
解决方案
修改请求格式、编码逻辑,增加间隔等待和异常捕获即可解决问题,修改后的参考代码如下:
from urllib import request import json import time # 初始化读取文件内容 text = open('readme.txt', encoding='utf-8').read() msg_url = '你的实际消息URL' while True: # 每次循环等待2秒,避免占用过高资源同时防止触发速率限制,可根据需求调整间隔时长 time.sleep(2) current_text = open('readme.txt', encoding='utf-8').read() if text != current_text: text = current_text try: # 构造JSON格式请求体 data = json.dumps({'content': text}).encode('utf-8') # 构造请求,指定正确的Content-Type请求头 req = request.Request( msg_url, data=data, headers={ 'User-Agent': 'Python-Discord Interface', 'Content-Type': 'application/json' }, method='PATCH' ) request.urlopen(req) except Exception as e: # 调试阶段可打开下方注释打印错误信息排查问题 # print(f"请求出错:{e}") pass
内容的提问来源于stack exchange,提问作者MLG Herobrine
相关产品推荐
相关产品推荐

