Flask表单提交后调用Discord Webhook触发400 Bad Request错误的问题求助
Flask表单提交后调用Discord Webhook触发400 Bad Request错误的问题求助
大家好,我现在遇到个头疼的问题:我用Flask做了个网站,里面有个提交工作记录的表单,本来预期是用户填完信息提交后,Flask把数据整理成Discord Embed,通过Webhook发送到指定频道,但现在每次提交都会触发requests.exceptions.HTTPError: 400 Client Error: Bad Request for url:错误。我折腾快一小时了,Python水平大概入门到进阶之间,实在找不到问题在哪,想请大家帮忙看看。
我试过的解决办法
- 给Webhook发送代码加了
try, except块捕获异常,但还是没定位到具体原因 - 把表单里的日期输入转成了字符串类型,避免格式问题
- 用同一个Webhook测试过其他简单的Embed内容,是能正常发送的,说明Webhook本身没问题
预期的正常流程
用户填完表单里的必填项(还有可选的游戏复选框),点击提交按钮后,Flask接收表单数据,生成对应的Discord Embed,通过Webhook发送到指定的Discord频道。
我的代码
HTML表单代码
<div class="logger"> <h1>Log a job:</h1> <form method="post"> <div class="left-form"> <input type="text" name="id" placeholder="ID" required /> <input type="text" name="date" id="date" placeholder="Date (DD.MM.YYYY)" /> <input type="text" name="from" placeholder="From (Company, City, Country)" required /> <input type="text" name="to" placeholder="To (Company, City, Country)" required /> <input type="text" name="cargo" placeholder="Cargo" required /> <input type="number" name="weight" placeholder="Weight" required /> </div> <div class="right-form"> <input type="number" name="distance" placeholder="Distance" required /> <input type="number" name="price" placeholder="Price" required /> <input type="number" name="fuel" placeholder="Fuel (L)" required /> <input type="text" name="truck" placeholder="Truck (Brand, Model)" required /> <input type="text" name="trailer" placeholder="Trailer (Brand, Model)" required /> <input type="checkbox" name="isEts" value="Yes" /> <label for="isEts">ETS2</label> <input type="checkbox" name="isAts" value="Yes" /> <label for="isAts">ATS</label> </div> <div class="log-btn"> <button type="submit">Log</button> </div> </form> </div>
Flask后端代码
from config import webhook, log_hook # 变量来自config.py from flask import Flask, render_template, request import requests from flask_cors import CORS from dhooks import Webhook, Embed contactHook = Webhook(webhook) logHook = Webhook(log_hook) app = Flask(__name__) CORS(app) @app.route('/') def home(): return render_template('index.html') @app.route('/inter') def inter(): return render_template('inter.html') @app.route('/reefer') def reefer(): return render_template('reefer.html') @app.route("/blog") def blog(): return render_template("blog.html") @app.route('/contact', methods=['POST', 'GET']) def contact(): if request.method == 'POST': name = request.form.get('name') email = request.form.get('email') discord = request.form.get('discord') subject = request.form.get('subject') message = request.form.get('msgbody') # 创建Embed contactembed = Embed( description="", color=0x000000, timestamp='now' ) img1 = "https://i.imgur.com/5s6i94n.png" hex = "https://i.imgur.com/6JxudkT.jpeg" contactembed.set_author(name='Hexx', icon_url=hex) contactembed.add_field(name='Name: ', value=name) contactembed.add_field(name='Email: ', value=email) contactembed.add_field(name='Discord: ', value=discord) contactembed.add_field(name='Subject: ', value=subject) contactembed.add_field(name='Message: ', value=message) contactembed.set_thumbnail(img1) # 发送Webhook contactHook.send(embed=contactembed) return render_template('contact.html') @app.route('/apply') def apply(): return render_template('apply.html') @app.route('/workspace/manual', methods=['POST', 'GET']) def workspace(): if request.method == 'POST': id = request.form.get('id') date = request.form.get('date') start = request.form.get('start') end = request.form.get('end') cargo = request.form.get('cargo') weight = request.form.get('weight') dist = request.form.get('distance') price = request.form.get('price') fuel = request.form.get('fuel') truck = request.form.get('truck') trailer = request.form.get('trailer') isAts = request.form.get('isAts') isEts2 = request.form.get('isEts2') logembed = Embed( description="", color=0x000000, timestamp='now' ) img1 = "https://i.imgur.com/5s6i94n.png" hex = "https://i.imgur.com/6JxudkT.jpeg" logembed.set_author(name='Hexx', icon_url=hex) logembed.set_thumbnail(img1) logembed.add_field(name='ID: ', value=id) logembed.add_field(name='Date: ', value=date) logembed.add_field(name='From: ', value=start) logembed.add_field(name='To: ', value=end) logembed.add_field(name='Cargo: ', value=cargo) logembed.add_field(name='Weight: ', value=f"{weight}T") logembed.add_field(name='Distance: ', value=f"{dist}KM") logembed.add_field(name='Price: ', value=f"{price}€") logembed.add_field(name='Fuel: ', value=f"{fuel}L") logembed.add_field(name='Truck: ', value=truck) logembed.add_field(name='Trailer: ', value=trailer) if isAts == 'Yes': logembed.add_field(name='Game: ', value='ATS') elif isEts2 == 'Yes': logembed.add_field(name='Game: ', value='ETS2') logHook.send(embed=logembed) return render_template('work_manual.html') if __name__ == '__main__': app.run(debug=True)
备注:内容来源于stack exchange,提问作者HexSK
相关产品推荐
相关产品推荐

