¿Cómo obtener encabezados http en el matraz?

199

Soy novato en Python y uso Python Flask y genero el servicio REST API.

Quiero verificar el encabezado de autorización que se envía al cliente.

Pero no puedo encontrar la manera de obtener el encabezado HTTP en el matraz.

Se agradece cualquier ayuda para obtener la autorización del encabezado HTTP.

Emil
fuente
2
Relacionado: ¿Cómo obtengo el agente de usuario con Flask?
Martijn Pieters
Además, consulte la documentación de inicio rápido y API de Flask .
Martijn Pieters

Respuestas:

298
from flask import request
request.headers.get('your-header-name')

request.headers se comporta como un diccionario, por lo que también puede obtener su encabezado como lo haría con cualquier diccionario:

request.headers['your-header-name']
sanyi
fuente
1
Gracias por la ayuda rápida @sanyi
emil
9
FYI: Estoy mirando flask.pocoo.org/snippets/8 y parece que también puede acceder al nombre de usuario y contraseña para la autenticación básica de esta manera: request.authorization.usernameo request.authorization.password.
Karthic Raghupathi
1
@Karthic Raghupathi, siempre y cuando el encabezado no tenga caracteres ilegales como guiones, como la mayoría de los encabezados (es decir, X-Api-Key), en cuyo caso debe acceder como un diccionario con teclas.
Blairg23
1
@Abhijeet: ... o podrías usar el código que sugerí en mi comentario anterior. Mucho más limpio.
Michael Scheper
55
Los encabezados de los matraces no son un dict, ¿sí? ... los veo regresar como werkzeug.datastructures.EnvironHeaders en mis pruebas. werkzeug.pocoo.org/docs/0.14/datastructures/…
Pandem1c
15

solo tenga en cuenta que las diferencias entre los métodos son, si el encabezado no existe

request.headers.get('your-header-name')

regresará Noneo no será una excepción, por lo que puede usarlo como

if request.headers.get('your-header-name'):
    ....

pero lo siguiente arrojará un error

if request.headers['your-header-name'] # KeyError: 'your-header-name'
    ....

Puedes manejarlo por

if 'your-header-name' in request.headers:
   customHeader = request.headers['your-header-name']
   ....
cieunteung
fuente
13

Si alguien intenta obtener todos los encabezados que se pasaron, simplemente use:

dict(request.headers)

te da todos los encabezados en un dict desde el cual puedes hacer lo que quieras. En mi caso de uso, tuve que reenviar todos los encabezados a otra API ya que la API de Python era un proxy

iam.Zanahoria
fuente
2
@JamieLindsey Esto no es cierto. request.headerses en realidad un EnvironHeadersobjeto al que se puede acceder como un diccionario. werkzeug.palletsprojects.com/en/1.0.x/datastructures/…
jasonrhaas
2

Veamos cómo obtenemos los parámetros, encabezados y cuerpo en Flask. Lo explicaré con la ayuda del cartero.

ingrese la descripción de la imagen aquí

Las claves y los valores de los parámetros se reflejan en el punto final de la API. por ejemplo clave1 y clave2 en el punto final: https://127.0.0.1/upload ? clave1 = valor1 y clave2 = valor2

from flask import Flask, request
app = Flask(__name__)

@app.route('/upload')
def upload():

  key_1 = request.args.get('key1')
  key_2 = request.args.get('key2')
  print(key_1)
  #--> value1
  print(key_2)
  #--> value2

Después de los parámetros, veamos ahora cómo obtener los encabezados :

ingrese la descripción de la imagen aquí

  header_1 = request.headers.get('header1')
  header_2 = request.headers.get('header2')
  print(header_1)
  #--> header_value1
  print(header_2)
  #--> header_value2

Ahora veamos cómo obtener el cuerpo

ingrese la descripción de la imagen aquí

  file_name = request.files['file'].filename
  ref_id = request.form['referenceId']
  print(ref_id)
  #--> WWB9838yb3r47484

entonces buscamos los archivos cargados con request.files y texto con request.form

Ajeet Verma
fuente