Como obter cabeçalhos http no balão?

199

Eu sou novato em python e usando Python Flask e gerando serviço de API REST.

Quero verificar o cabeçalho de autorização enviado ao cliente.

Mas não consigo encontrar uma maneira de obter o cabeçalho HTTP no balão.

Qualquer ajuda para obter autorização de cabeçalho HTTP é apreciada.

emil
fonte
2
Relacionado: Como obtenho o agente do usuário com o Flask?
Martijn Pieters
Além disso, consulte o início rápido do Flask e a documentação da API .
Martijn Pieters

Respostas:

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

request.headers se comporta como um dicionário, então você também pode obter seu cabeçalho como faria com qualquer dicionário:

request.headers['your-header-name']
sanyi
fonte
1
Obrigado pela ajuda @sanyi rápida
Emil
9
FYI: Estou vendo flask.pocoo.org/snippets/8 e parece que você também pode acessar o nome de usuário e a senha para autenticação básica como: request.authorization.usernameou request.authorization.password.
Karthic Raghupathi
1
@ Karthic Raghupathi, desde que o cabeçalho não tenha caracteres ilegais, como traços, o que a maioria dos cabeçalhos possui (por exemplo, X-Api-Key); nesse caso, você precisa acessá-lo como um dicionário com chaves.
Blairg23
1
@ Abhijeet: ... ou você pode simplesmente usar o código que sugeri no meu comentário anterior. Muito mais limpo.
Michael Scheper
5
Os cabeçalhos dos balões não são um ditado, sim? ... eu os vejo voltando como werkzeug.datastructures.EnvironHeaders nos meus testes. werkzeug.pocoo.org/docs/0.14/datastructures/...
Pandem1c
15

apenas observe, os diferentes entre os métodos são, se o cabeçalho não existir

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

retornará Noneou não será exceção, para que você possa usá-lo como

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

mas o seguinte gerará um erro

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

Você pode lidar com isso

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

Se alguém está tentando buscar todos os cabeçalhos que foram passados, basta usar:

dict(request.headers)

fornece todos os cabeçalhos de um ditado a partir dos quais você pode realmente executar as operações que desejar. No meu caso de uso, tive que encaminhar todos os cabeçalhos para outra API, pois a API python era um proxy

iam.Carrot
fonte
2
@JamieLindsey Isso não é verdade. request.headersé realmente um EnvironHeadersobjeto que pode ser acessado como um dicionário. werkzeug.palletsprojects.com/en/1.0.x/datastructures/...
jasonrhaas
2

Vamos ver como obtemos os parâmetros, cabeçalhos e corpo no Flask. Vou explicar com a ajuda do carteiro.

insira a descrição da imagem aqui

As chaves e valores dos parâmetros são refletidos no terminal da API. por exemplo, key1 e key2 no terminal: https://127.0.0.1/upload ? key1 = valor1 & key2 = 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

Após os parâmetros, agora vamos ver como obter os cabeçalhos :

insira a descrição da imagem aqui

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

Agora vamos ver como conseguir o corpo

insira a descrição da imagem aqui

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

por isso, buscamos os arquivos enviados com request.files e texto com request.form

Ajeet Verma
fonte