Jak zdobyć nagłówki http w kolbie?

199

Jestem nowicjuszem w Pythonie i używam Python Flask i generuję usługę API REST.

Chcę sprawdzić nagłówek autoryzacji, który jest wysyłany do klienta.

Ale nie mogę znaleźć sposobu, aby uzyskać nagłówek HTTP w kolbie.

Dziękujemy za pomoc w uzyskaniu autoryzacji nagłówka HTTP.

emil
źródło
Zobacz także dokumentację Flask Quickstart i API .
Martijn Pieters

Odpowiedzi:

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

request.headers zachowuje się jak słownik, więc możesz również uzyskać nagłówek tak jak w przypadku dowolnego słownika:

request.headers['your-header-name']
sanyi
źródło
1
Dzięki za szybką pomoc @sanyi
emil
9
FYI: Patrzę na flask.pocoo.org/snippets/8 i wygląda na to, że możesz również uzyskać dostęp do nazwy użytkownika i hasła w celu podstawowego uwierzytelnienia, takiego jak: request.authorization.usernamelub request.authorization.password.
Karthic Raghupathi
1
@Karthic Raghupathi, o ile nagłówek nie ma niedozwolonych znaków, takich jak myślniki, co robi większość nagłówków (np. X-Api-Key), w takim przypadku musisz uzyskać do niego dostęp jak słownik z kluczami.
Blairg23,
1
@Abhijeet: ... lub możesz po prostu użyć kodu, który zasugerowałem w poprzednim komentarzu. Dużo czystsze.
Michael Scheper
5
Nagłówki kolb to nie dykt, tak? ... widzę, że wracają jako werkzeug.datastructures.EnvironHeaders w moich testach. werkzeug.pocoo.org/docs/0.14/datastructures/…
Pandem1c
15

Uwaga: Różnice między metodami są takie, jeśli nagłówek nie istnieje

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

zwróci Nonelub nie będzie wyjątku, więc możesz go używać tak jak

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

ale poniższe spowoduje zgłoszenie błędu

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

Możesz sobie z tym poradzić

if 'your-header-name' in request.headers:
   customHeader = request.headers['your-header-name']
   ....
cieunteung
źródło
13

Jeśli ktoś próbuje pobrać wszystkie nagłówki, które zostały przekazane, wystarczy użyć:

dict(request.headers)

daje ci wszystkie nagłówki w dykcie, z którego możesz faktycznie robić wszystko, co chcesz. W moim przypadku musiałem przekazać wszystkie nagłówki do innego API, ponieważ API Pythona było proxy

iam.Carrot
źródło
2
@JamieLindsey To nie jest prawda. request.headersjest właściwie EnvironHeadersobiektem, do którego można uzyskać dostęp jak w słowniku. werkzeug.palletsprojects.com/en/1.0.x/datastructures/…
jasonrhaas
2

Zobaczmy, jak otrzymujemy parametry, nagłówki i ciało w Flask. Wytłumaczę za pomocą listonosza.

wprowadź opis zdjęcia tutaj

Klucze parametrów i wartości są odzwierciedlane w punkcie końcowym interfejsu API. na przykład klucz1 i klucz2 w punkcie końcowym: https://127.0.0.1/upload ? klucz1 = wartość1 i klucz2 = wartość2

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

Po params, zobaczmy teraz, jak uzyskać nagłówki :

wprowadź opis zdjęcia tutaj

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

Zobaczmy teraz, jak zdobyć ciało

wprowadź opis zdjęcia tutaj

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

więc pobieramy przesłane pliki z request.files i tekst z request.form

Ajeet Verma
źródło