什么是Python中的HTTP 400错误请求

时间:2017-09-21 11:55:44

标签: python python-2.7 flask

什么是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 ,以及如何预防?

感谢。

1 个答案:

答案 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内部服务器错误