फ्लास्क में http हेडर कैसे प्राप्त करें?


199

मैं अजगर के लिए नौसिखिया हूं और पायथन फ्लास्क का उपयोग कर रहा हूं और रेस्ट एपीआई सेवा का निर्माण कर रहा हूं।

मैं प्राधिकरण हेडर की जांच करना चाहता हूं जो क्लाइंट को भेजा गया है।

लेकिन मुझे फ्लास्क में HTTP हेडर प्राप्त करने का तरीका नहीं मिला।

HTTP हैडर प्राधिकरण प्राप्त करने के लिए कोई भी मदद की सराहना की है।



जवाबों:


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

request.headers एक शब्दकोश की तरह व्यवहार करता है, इसलिए आप अपने हेडर को भी प्राप्त कर सकते हैं जैसे आप किसी शब्दकोश के साथ करेंगे:

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

1
त्वरित मदद के लिए धन्यवाद @sanyi
एमिल

9
FYI करें: मैं flask.pocoo.org/snippets/8 देख रहा हूं और ऐसा प्रतीत होता है कि आप मूलभूत प्रमाणीकरण जैसे उपयोगकर्ता नाम और पासवर्ड का उपयोग भी कर सकते हैं: request.authorization.usernameया request.authorization.password
कार्तिक रघुपति 20

1
@ कार्तिक रघुपति, जब तक हेडर में डैश जैसे अवैध वर्ण नहीं होते हैं, जो कि अधिकांश हेडर करते हैं (जैसे, एक्स-आपी-की), जिस स्थिति में आपको कुंजी के साथ एक शब्दकोश की तरह इसे एक्सेस करने की आवश्यकता होती है।
ब्लेयरगें 23

1
@ अभिजीत: ... या आप उस कोड का उपयोग कर सकते हैं जो मैंने अपनी पिछली टिप्पणी में सुझाया था। बहुत सफाई वाला।
माइकल स्काइपर

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)

यह आपको एक शीर्ष में सभी हेडर देता है जिसमें से आप वास्तव में जो कुछ भी ऑप्स करना चाहते हैं वह कर सकते हैं। मेरे उपयोग के मामले में मुझे सभी हेडर को एक और एपीआई के लिए अग्रेषित करना पड़ा क्योंकि अजगर एपीआई एक प्रॉक्सी था


2
@JamieLindsey यह सच नहीं है। request.headersवास्तव में एक EnvironHeadersवस्तु है जिसे एक शब्दकोश की तरह एक्सेस किया जा सकता है। werkzeug.palletsprojects.com/en/1.0.x/datastructures/…
jasonrhaas

2

आइए देखें कि कैसे फ्लास्क में हमें परम, हेडर और बॉडी मिलती है। मैं पोस्टमैन की मदद से समझाने वाला हूं।

यहां छवि विवरण दर्ज करें

Params कुंजी और मान API समापन बिंदु में परिलक्षित होते हैं। उदाहरण के लिए समापन बिंदु में key1 और key2: https://127.0.0.1/upload ? कुंजी 1 = मान 1 और कुंजी 2 = मान 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

परम के बाद, अब देखते हैं कि हेडर कैसे प्राप्त करें :

यहां छवि विवरण दर्ज करें

  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.form के साथ request.files और पाठ के साथ अपलोड की गई फ़ाइलों को प्राप्त करते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.