Як отримати заголовки http у колбі?


200

Я новачок у python та використовую Python Flask та генерую службу REST API.

Я хочу перевірити заголовок авторизації, який надсилається клієнту.

Але я не можу знайти спосіб отримати заголовок HTTP у колбі.

Будь-яка допомога щодо отримання авторизації заголовка HTTP вдячна.



Також дивіться документацію Flask Quickstart і API .
Martijn Pieters

Відповіді:


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

request.headers поводиться як словник, тому ви також можете отримати свій заголовок, як і в будь-якому словнику:

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

1
Дякую за швидку допомогу @sanyi
emil

9
FYI: Я переглядаю flask.pocoo.org/snippets/8, і, здається, ви також можете отримати доступ до імені користувача та пароля для базової автентифікації, наприклад: request.authorization.usernameабо request.authorization.password.
Karthic Raghupathi

1
@Karthic Raghupathi, якщо у заголовку немає незаконних символів, як тире, як це робить більшість заголовків (тобто X-Api-Key), і в цьому випадку вам потрібно отримати доступ до нього, як до словника з ключами.
Blairg23

1
@Abhijeet: ... або ви можете просто використовувати код, який я запропонував у своєму попередньому коментарі. Значно чистіше.
Майкл Шепер

5
Заголовки колби - це не диктант, так? ... Я бачу, як вони повертаються як werkzeug.datastructures.EnvironHeaders у моїх тестах. werkzeug.pocoo.org/docs/0.14/datastructures/…
Pandem1c

15

лише зауважте: Різні між методами є, якщо заголовок не існує

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

повернеться Noneабо не є винятком, так що ви можете використовувати це як

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

але наступне призведе до помилки

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

Ви можете впоратися з цим

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

13

Якщо хтось намагається отримати всі передані заголовки, просто використовуйте:

dict(request.headers)

це дає вам усі заголовки в назви, з якого ви можете реально робити все, що вам хочеться. У моєму випадку використання я повинен був переслати всі заголовки до іншого API, оскільки API python був проксі


2
@JamieLindsey Це неправда. request.headersнасправді є EnvironHeadersоб’єктом, до якого можна отримати доступ, як словник. werkzeug.palletsprojects.com/en/1.0.x/datastructures/…
jasonrhaas

2

Подивимось, як ми отримуємо парами, заголовки та корпус у колбі. Я поясню за допомогою листоноші.

введіть тут опис зображення

Параметри ключів та значень відображаються в кінцевій точці API. наприклад key1 та key2 у кінцевій точці: https://127.0.0.1/upload ? key1 = value1 & key2 = value2

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

Після парами, давайте тепер подивимося, як отримати заголовки :

введіть тут опис зображення

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

Тепер давайте подивимося, як дістати тіло

введіть тут опис зображення

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

тому ми завантажуємо завантажені файли з request.files та текст із request.form

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.