gpt4 book ai didi

python - 什么是 Flask 中的 HTTP 400 错误请求

转载 作者:行者123 更新时间:2023-11-28 19:06:18 25 4
gpt4 key购买 nike

什么是 Http 400 Bad Request 以及导致它发生的原因?

我可以使用什么方法来知道 request.form[key] 中的哪个 key 导致了错误的请求,我该如何防止它?

已更新

正如 Gerand 在他的评论中提到的:

This error happens when you are requesting a file through http whichdoesn't exist [....]

为了更清楚,这里是我导致 Bad Request 的示例代码:

你好.py

# -*- coding: utf-8 -*-
from flask import *
import re

app = Flask(__name__)


@app.route('/', methods=['GET','POST'])
def checkName():

return render_template('hello.html')

@app.route('/hello',methods=['GET','POST'])
def printName():
if request.method=='POST':
username = request.form['username']
bad_key = request.form['bad_key'] # this key is not exist

return "Hello, ",username

if __name__ == '__main__':

app.run(debug=True)

hello.html

<form class="form-horizontal" action='/hello' method='POST' name="frm_submit">
<div class="form-group">
<label for="username" class="col-sm-2 control-label">User Name:</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="username" name="username" placeholder="username">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Submit</button>
</div>
</div>
</form>

从上面的代码中,浏览器返回Bad Request - The browser (or proxy) sent a request that this server couldn't understand. 没有给出导致此错误的线索。

因此,我可以使用哪种方法知道导致此错误的,以及如何防止它?

谢谢。

最佳答案

Flask 使用 werkzeug库的 MultiDict 数据结构来保存 POST 数据。

如果您查看 implementationMultiDict.__getitem__ 中,您可以看到,如果未找到键,它将以键的名称作为参数引发 BadRequestKeyError。因此,您可以检查异常的 args 属性以获取错误 key 的名称:

from werkzeug.exceptions import BadRequestKeyError

@app.route('/hello', methods=['GET', 'POST'])
def hello():
if request.method == 'POST':
username = request.form['username']
try:
bad_key = request.form['bad_key']
except BadRequestKeyError as ex:
return 'Unknown key: "{}"'.format(ex.args[0]), 500

请注意,虽然BadRequestKeyError字符串表示

400 Bad Request: The browser (or proxy) sent a request that this server could not understand.

响应的状态其实是

500 Internal Server Error

request.form 的键对应于 HTML 页面中表单中 input 标签的 name 属性发布。因此 BadRequestKeyError 通常是由 HTML 中的 name 属性与 request.form['some_name'] 期望的名称不匹配引起的> 在 route 。

关于python - 什么是 Flask 中的 HTTP 400 错误请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46343308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com