You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 03:43:08