什么是Http 400 Bad Request以及导致它发生的原因?
我可以使用哪种方法来了解导致错误请求的key
request.form[key]
中的哪个Bad Request
以及如何阻止它?
请帮助解释和举例。
感谢。
更新
正如Gerand在评论中提到的那样:
当您通过http请求文件时会发生此错误 不存在[....]
为了更清楚,这里是导致# -*- 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.py
<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>
hello.html的
Bad Request - The browser (or proxy) sent a request that this server could not understand.
从上面的代码中,浏览器返回key
,但没有提供导致此错误的键的线索。
因此,我可以使用哪种方法来了解导致此错误的../../sdk/native/jni/OpenCV.mk
,以及如何预防?
感谢。
答案 0 :(得分:0)
Flask使用werkzeug库的MultiDict
数据结构来保存POST数据。
如果您查看MultiDict.__getitem__
的{{3}},可以发现,如果没有找到键,它将以该键的名称作为参数引发BadRequestKeyError
。因此,您可以检查异常的args
属性以获取错误密钥的名称:
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错误的请求:浏览器(或代理)发送了该服务器无法理解的请求。
响应状态实际上是
500内部服务器错误