python - 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
那么,为什么不使用我的自定义错误处理程序?这是否与请求的可笑的不正确语法有关?任何反馈都会有所帮助
解决方案
错误处理程序用于应用程序代码中未处理的错误。发送错误的 HTTP 请求会导致 HTTP 服务器层出错(在您的情况下是 Werkzeug 开发服务器,或者在生产中使用像 Nginx 这样的 HTTP 服务器)。Flask 或任何其他 WSGI 应用程序无法处理您看到的错误,因为请求无效,因此它不会到达应用程序层。
推荐阅读
- json - 如何在空手道框架中动态更改大 json?
- tableau-api - 按钮单击时通过电子邮件发送过滤数据列表的 URL 操作
- desktop - 站立式办公桌会自行移动?
- javascript - 逗号前的Javascript大写单词
- javascript - JS UDF 返回标准 SQL / BigQuery 的结构并创建两列
- php - PHP:如何在 CSS 中调用 php 变量?
- selenium - 如何检查元素是否被点击 - selenium
- python - `versioneer` 是否与`PyPI` 打包兼容?
- android - 我无法使用 FindViewById 找到元素
- apache-kafka - 无法访问 Pepperbox 或 kafkameter 中的 jmeter 变量