首页 > 解决方案 > Flask 400 错误处理程序未因 HTTP 请求语法错误而触发

问题描述

我有一个烧瓶应用程序,它接收来自另一个软件的错误请求。我想手动处理这些请求,因为我仍然可以调用相关函数。一个错误请求示例如下所示GET GET / HTTP/1.1,前面有额外的 GET

因此,我尝试添加一个自定义错误处理程序,如文档中所示。但是,我无法使其工作,而是使用默认的错误处理程序。这是我的代码:

from flask import Flask
app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello, World!'


@app.errorhandler(400)
def handle_bad_request(e):
    print('Custom handler active')
    return 'bad request!', 400


if __name__ == '__main__':
    app.run()'

我使用 Packetsender 发送类似的错误请求,Flask 接收它们并使用我在控制台中看到的默认错误处理程序:

127.0.0.1 - - [18/Jan/2021 17:49:28] code 400, message Bad request syntax ('GET GET / HTTP/1.1')
127.0.0.1 - - [18/Jan/2021 17:49:28] "GET GET / HTTP/1.1" HTTPStatus.BAD_REQUEST

那么,为什么不使用我的自定义错误处理程序?这是否与请求的可笑的不正确语法有关?任何反馈都会有所帮助

标签: pythonflask

解决方案


错误处理程序用于应用程序代码中未处理的错误。发送错误的 HTTP 请求会导致 HTTP 服务器层出错(在您的情况下是 Werkzeug 开发服务器,或者在生产中使用像 Nginx 这样的 HTTP 服务器)。Flask 或任何其他 WSGI 应用程序无法处理您看到的错误,因为请求无效,因此它不会到达应用程序层。


推荐阅读