Ранее я спрашивал, как получить данные, полученные в запросе Flask, потому что они request.data
были пустыми. Ответ объяснил, что request.data
это необработанное тело сообщения, но оно будет пустым, если данные формы будут проанализированы. Как я могу получить необработанное тело сообщения безоговорочно?
@app.route('/', methods=['POST'])
def parse_request():
data = request.data # empty in some cases
# always need raw data here, not parsed form data
request.stream
поток необработанных данных, передаваемых приложению сервером WSGI. При его чтении не выполняется синтаксический анализ, хотя обычно выrequest.get_data()
этого хотите .Поток будет пустым, если он был ранее прочитан
request.data
или другим атрибутом.источник
Я создал промежуточное программное обеспечение WSGI, в котором хранится необработанное тело из
environ['wsgi.input']
потока. Я сохранил значение в среде WSGI, чтобы получить к нему доступ изrequest.environ['body_copy']
своего приложения.Это не обязательно в Werkzeug или Flask, так как
request.get_data()
получит необработанные данные независимо от типа контента, но с лучшей обработкой поведения HTTP и WSGI.Это считывает все тело в память, что будет проблемой, если, например, опубликован большой файл. Это не будет ничего читать, если
Content-Length
заголовок отсутствует, поэтому он не будет обрабатывать потоковые запросы.источник
request.data
будет пустым, еслиrequest.headers["Content-Type"]
будет распознан как данные формы, которые будут проанализированыrequest.form
. Чтобы получить необработанные данные независимо от типа контента, используйтеrequest.get_data()
.request.data
вызовыrequest.get_data(parse_form_data=True)
, что приводит к другому поведению данных формы.источник