Wie bekomme ich http-Header in den Kolben?

199

Ich bin ein Neuling in Python und benutze Python Flask und generiere REST API Service.

Ich möchte den Autorisierungsheader überprüfen, der an den Client gesendet wird.

Aber ich kann keinen Weg finden, um den HTTP-Header in den Kolben zu bekommen.

Jede Hilfe zum Abrufen der HTTP-Header-Autorisierung ist willkommen.

Emil
quelle

Antworten:

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

request.headers verhält sich wie ein Wörterbuch, sodass Sie Ihren Header auch wie bei jedem Wörterbuch abrufen können:

request.headers['your-header-name']
Sanyi
quelle
1
Vielen Dank für die schnelle Hilfe @sanyi
emil
9
Zu Ihrer Information : Ich schaue auf flask.pocoo.org/snippets/8 und es scheint, dass Sie auch auf den Benutzernamen und das Passwort zugreifen können, um eine grundlegende Authentifizierung wie folgt durchzuführen : request.authorization.usernameoder request.authorization.password.
Karthic Raghupathi
1
@Karthic Raghupathi, solange der Header keine unzulässigen Zeichen wie Bindestriche enthält, wie es die meisten Header tun (dh X-Api-Key). In diesem Fall müssen Sie wie ein Wörterbuch mit Schlüsseln darauf zugreifen.
Blairg23
1
@Abhijeet: ... oder Sie könnten einfach den Code verwenden, den ich in meinem vorherigen Kommentar vorgeschlagen habe. Viel sauberer.
Michael Scheper
5
Flaschenköpfe sind kein Diktat, ja? ... ich sehe sie in meinen Tests als werkzeug.datastructures.EnvironHeaders zurückkommen. werkzeug.pocoo.org/docs/0.14/datastructures/…
Pandem1c
15

Beachten Sie nur, dass sich die Methoden unterscheiden, wenn der Header nicht vorhanden ist

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

wird zurückgegeben Noneoder keine Ausnahme, so können Sie es wie verwenden

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

Aber das Folgende wird einen Fehler auslösen

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

Sie können damit umgehen

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

Wenn jemand versucht, alle übergebenen Header abzurufen, verwenden Sie einfach:

dict(request.headers)

Es gibt Ihnen alle Header in einem Diktat, von dem aus Sie tatsächlich tun können, was Sie wollen. In meinem Anwendungsfall musste ich alle Header an eine andere API weiterleiten, da die Python-API ein Proxy war

iam.Carrot
quelle
2
@ JamieLindsey Das ist nicht wahr. request.headersist eigentlich ein EnvironHeadersObjekt, auf das wie ein Wörterbuch zugegriffen werden kann. werkzeug.palletsprojects.com/de/1.0.x/datastructures/…
jasonrhaas
2

Mal sehen, wie wir die Parameter, Header und Body in Flask bekommen. Ich werde es mit Hilfe eines Postboten erklären.

Geben Sie hier die Bildbeschreibung ein

Die Parameterschlüssel und -werte werden im API-Endpunkt wiedergegeben. Zum Beispiel Schlüssel1 und Schlüssel2 im Endpunkt: https://127.0.0.1/upload ? Schlüssel1 = Wert1 & Schlüssel2 = Wert2

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

Lassen Sie uns nach params nun sehen, wie Sie die Header erhalten :

Geben Sie hier die Bildbeschreibung ein

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

Nun wollen wir sehen, wie man den Körper bekommt

Geben Sie hier die Bildbeschreibung ein

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

Also holen wir die hochgeladenen Dateien mit request.files und den Text mit request.form

Ajeet Verma
quelle