Comment obtenir les en-têtes http en flacon?

199

Je suis novice en python et en utilisant Python Flask et en générant le service API REST.

Je veux vérifier l'en-tête d'autorisation qui est envoyé au client.

Mais je ne trouve pas de moyen d'obtenir l'en-tête HTTP dans la fiole.

Toute aide pour obtenir l'autorisation d'en-tête HTTP est appréciée.

emil
la source
Consultez également la documentation de démarrage rapide de l' API et la documentation de l'API .
Martijn Pieters

Réponses:

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

request.headers se comporte comme un dictionnaire, vous pouvez donc également obtenir votre en-tête comme vous le feriez avec n'importe quel dictionnaire:

request.headers['your-header-name']
sanyi
la source
1
Merci pour l'aide rapide @sanyi
emil
9
FYI: Je regarde flask.pocoo.org/snippets/8 et il semble que vous pouvez également accéder au nom d'utilisateur et au mot de passe pour l'authentification de base comme ceci: request.authorization.usernameou request.authorization.password.
Karthic Raghupathi
1
@Karthic Raghupathi, tant que l'en-tête n'a pas de caractères illégaux comme des tirets, ce que la plupart des en-têtes font (par exemple, X-Api-Key), auquel cas vous devez y accéder comme un dictionnaire avec des clés.
Blairg23
1
@Abhijeet: ... ou vous pouvez simplement utiliser le code que j'ai suggéré dans mon commentaire précédent. Beaucoup plus propre.
Michael Scheper
5
Les en-têtes de flacons ne sont pas un dicton, oui? ... Je les vois revenir en tant que werkzeug.datastructures.EnvironHeaders dans mes tests. werkzeug.pocoo.org/docs/0.14/datastructures/…
Pandem1c
15

il suffit de noter que les différences entre les méthodes sont, si l'en-tête n'existe pas

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

reviendra Noneou aucune exception, vous pouvez donc l'utiliser comme

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

mais ce qui suit générera une erreur

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

Vous pouvez le gérer en

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

Si quelqu'un essaie de récupérer tous les en-têtes qui ont été passés, utilisez simplement:

dict(request.headers)

il vous donne tous les en-têtes dans un dict à partir duquel vous pouvez réellement faire ce que vous voulez. Dans mon cas d'utilisation, j'ai dû transférer tous les en-têtes vers une autre API car l'API python était un proxy

iam.Carrot
la source
2
@JamieLindsey Ce n'est pas vrai. request.headersest en fait un EnvironHeadersobjet accessible comme un dictionnaire. werkzeug.palletsprojects.com/en/1.0.x/datastructures/…
jasonrhaas
2

Voyons comment nous obtenons les paramètres, les en-têtes et le corps dans Flask. Je vais expliquer avec l'aide du facteur.

entrez la description de l'image ici

Les clés et valeurs params sont reflétées dans le point de terminaison API. par exemple, key1 et key2 dans le point de terminaison: https://127.0.0.1/upload ? clé1 = valeur1 & clé2 = valeur2

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

Après les paramètres, voyons maintenant comment obtenir les en- têtes :

entrez la description de l'image ici

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

Voyons maintenant comment obtenir le corps

entrez la description de l'image ici

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

nous récupérons donc les fichiers téléchargés avec request.files et le texte avec request.form

Ajeet Verma
la source