#python #flask
#python #flask
Вопрос:
У меня есть приложение flask, которое получает неверные запросы от другого программного обеспечения. Я хотел бы вручную обрабатывать эти запросы, поскольку затем я все равно могу вызывать соответствующие функции. Пример неправильного запроса выглядит следующим 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
Итак, почему мой пользовательский обработчик ошибок не используется? Это как-то связано со смехотворно неправильным синтаксисом запросов? Любая обратная связь была бы полезна
Ответ №1:
Обработчики ошибок предназначены для необработанных ошибок в коде приложения. Отправка неправильного HTTP-запроса вызывает ошибку на уровне HTTP-сервера (сервер разработки Werkzeug в вашем случае или HTTP-сервер, такой как Nginx в производстве). У Flask или любого другого приложения WSGI нет возможности обрабатывать ошибки, которые вы видите, поскольку запрос недействителен, поэтому он не попадает на уровень приложения.