Come ottenere le intestazioni http in pallone?


200

Sono novizio di Python e utilizzo di Python Flask e la generazione del servizio API REST.

Voglio verificare l'intestazione dell'autorizzazione che viene inviata al client.

Ma non riesco a trovare il modo di ottenere l'intestazione HTTP nella beuta.

Qualsiasi aiuto per ottenere l'autorizzazione dell'intestazione HTTP è apprezzato.



Inoltre, consultare la documentazione di avvio rapido e l' API di Flask .
Martijn Pieters

Risposte:


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

request.headers si comporta come un dizionario, quindi puoi anche ottenere la tua intestazione come faresti con qualsiasi dizionario:

request.headers['your-header-name']

1
Grazie per un rapido aiuto @sanyi
emil

9
FYI: Sto guardando flask.pocoo.org/snippets/8 e sembra che potresti anche accedere al nome utente e alla password per l'autenticazione di base in questo modo: request.authorization.usernameoppure request.authorization.password.
Karthic Raghupathi,

1
@Karthic Raghupathi, fintanto che l'intestazione non ha caratteri illegali come trattini, cosa che la maggior parte delle intestazioni ha (cioè X-Api-Key), nel qual caso è necessario accedervi come un dizionario con le chiavi.
Blairg23,

1
@Abhijeet: ... o potresti semplicemente usare il codice che ho suggerito nel mio commento precedente. Molto più pulito.
Michael Scheper,

5
Le intestazioni del pallone non sono un dict, sì? ... le vedo tornare come werkzeug.datastructures.EnvironHeaders nei miei test. werkzeug.pocoo.org/docs/0.14/datastructures/…
Pandem1c

15

basta notare, I diversi metodi sono diversi, se l'intestazione non esiste

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

restituirà Noneo nessuna eccezione, quindi puoi usarlo come

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

ma quanto segue genererà un errore

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

Puoi gestirlo da

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

14

Se qualcuno sta cercando di recuperare tutte le intestazioni che sono state passate, basta semplicemente usare:

dict(request.headers)

ti dà tutte le intestazioni in un dict da cui puoi effettivamente fare qualsiasi operazione tu voglia. Nel mio caso d'uso ho dovuto inoltrare tutte le intestazioni a un'altra API poiché l'API python era un proxy


2
@JamieLindsey Questo non è vero. request.headersè in realtà un EnvironHeadersoggetto a cui è possibile accedere come un dizionario. werkzeug.palletsprojects.com/en/1.0.x/datastructures/…
jasonrhaas

2

Vediamo come otteniamo i parametri, le intestazioni e il corpo in Flask. Spiegherò con l'aiuto del postino.

inserisci qui la descrizione dell'immagine

Le chiavi e i valori dei parametri si riflettono nell'endpoint API. ad esempio key1 e key2 nell'endpoint: https://127.0.0.1/upload ? chiave1 = valore1 e chiave2 = valore2

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

Dopo i parametri, vediamo ora come ottenere le intestazioni :

inserisci qui la descrizione dell'immagine

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

Ora vediamo come ottenere il corpo

inserisci qui la descrizione dell'immagine

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

quindi recuperiamo i file caricati con request.files e il testo con request.form

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.