Anteriormente, pregunté cómo obtener los datos recibidos en la solicitud de Flask porque request.dataestaba vacío. La respuesta explicó que request.dataes el cuerpo de la publicación sin formato, pero estará vacío si se analizan los datos del formulario. ¿Cómo puedo obtener el cuerpo de la publicación sin procesar incondicionalmente?
@app.route('/', methods=['POST'])
def parse_request():
data = request.data # empty in some cases
# always need raw data here, not parsed form data

request.streames la secuencia de datos sin procesar que el servidor WSGI pasa a la aplicación. No se realiza el análisis al leerlo, aunque generalmente desearequest.get_data()hacerlo.La secuencia estará vacía si fue leída previamente por
request.dataotro atributo.fuente
Creé un middleware WSGI que almacena el cuerpo sin procesar de la
environ['wsgi.input']secuencia. Guardé el valor en el entorno WSGI para poder acceder a él desderequest.environ['body_copy']mi aplicación.Esto no es necesario en Werkzeug o Flask, ya
request.get_data()que obtendrá los datos en bruto independientemente del tipo de contenido, pero con un mejor manejo del comportamiento HTTP y WSGI.Esto lee todo el cuerpo en la memoria, lo que será un problema si, por ejemplo, se publica un archivo grande. Esto no leerá nada si
Content-Lengthfalta el encabezado, por lo que no manejará las solicitudes de transmisión.fuente
request.dataestará vacío sirequest.headers["Content-Type"]se reconoce como datos de formulario, que se analizarán enrequest.form. Para obtener los datos sin procesar independientemente del tipo de contenido, userequest.get_data().request.datallamadasrequest.get_data(parse_form_data=True), lo que da como resultado un comportamiento diferente para los datos del formulario.fuente