Şişeye http başlıkları nasıl alınır?


200

Python ve Python Flask kullanarak ve REST API hizmeti üreten acemi.

İstemciye gönderilen yetkilendirme başlığını kontrol etmek istiyorum.

Ancak HTTP başlığını şişeye almanın yolunu bulamıyorum.

HTTP üstbilgisi yetkisi almak için herhangi bir yardım takdir edilmektedir.



Yanıtlar:


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

request.headers sözlük gibi davranır, böylece üstbilginizi herhangi bir sözlükte olduğu gibi alabilirsiniz:

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

1
Hızlı yardım için teşekkürler @sanyi
emil

9
Bilginize: flask.pocoo.org/snippets/8'e bakıyorum ve aynı şekilde temel kimlik doğrulaması için kullanıcı adı ve parolaya da erişebileceğiniz anlaşılıyor: request.authorization.usernameveya request.authorization.password.
Karthic Raghupathi

1
@Karthic Raghupathi, üstbilgi, çoğu üstbilginin yaptığı çizgi (x-Api-Key) gibi yasadışı karakterlere sahip olmadığı sürece, bu durumda anahtarlı bir sözlük gibi erişmeniz gerekir.
Blairg23

1
@Abhijeet: ... ya da sadece önceki yorumumda önerdiğim kodu kullanabilirsiniz. Çok daha temiz.
Michael Scheper

5
Flask başlıkları bir dikte değil, evet? ... onları testlerimde werkzeug.datastructures.EnvironHeaders olarak geri geldiğini görüyorum. werkzeug.pocoo.org/docs/0.14/datastructures/…
Pandem1c

15

sadece not, yöntemler arasındaki farklı, başlık yoksa

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

dönecek Noneveya istisna olmayacak , böylece kullanabilirsiniz

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

ancak aşağıdakiler hata verir

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

Bununla başa çıkabilirsin

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

13

Birisi iletilen tüm başlıkları almaya çalışıyorsa, sadece şunu kullanın:

dict(request.headers)

size bir dikte tüm başlıkları verir hangi hangi gerçekten istediğiniz ops yapabilirsiniz. Kullanım durumumda, python API'sı bir proxy olduğu için tüm başlıkları başka bir API'ye iletmek zorunda kaldım


2
@JamieLindsey Bu doğru değil. request.headersaslında EnvironHeaderssözlük gibi erişilebilen bir nesnedir. werkzeug.palletsprojects.com/en/1.0.x/datastructures/…
jasonrhaas

2

Flask'taki paramları, başlıkları ve bedeni nasıl elde ettiğimizi görelim. Postacı yardımı ile açıklayacağım.

resim açıklamasını buraya girin

Params anahtarları ve değerleri API uç noktasına yansıtılır. örneğin bitiş noktasındaki key1 ve key2: https://127.0.0.1/upload ? anahtar1 = değer1 ve anahtar2 = değer2

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

Parametrelerden sonra, şimdi başlıkların nasıl alınacağını görelim :

resim açıklamasını buraya girin

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

Şimdi vücudu nasıl alacağınızı görelim

resim açıklamasını buraya girin

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

yüklenen dosyaları request.files ile ve request.form içeren bir metinle alırız

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.