Bagaimana cara mendapatkan header http dalam labu?

199

Saya pemula untuk python dan menggunakan Python Flask dan menghasilkan layanan REST API.

Saya ingin memeriksa tajuk otorisasi yang dikirim klien.

Tetapi saya tidak dapat menemukan cara untuk mendapatkan header HTTP dalam labu.

Setiap bantuan untuk mendapatkan otorisasi tajuk HTTP dihargai.

Emil
sumber
Juga, lihat Flask Quickstart dan dokumentasi API .
Martijn Pieters

Jawaban:

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

request.headers berperilaku seperti kamus, sehingga Anda juga bisa mendapatkan tajuk seperti halnya dengan kamus apa pun:

request.headers['your-header-name']
bernyanyi
sumber
1
Terima kasih atas bantuan cepat @sanyi
emil
9
FYI: Saya sedang melihat flask.pocoo.org/snippets/8 dan tampaknya Anda juga dapat mengakses nama pengguna dan kata sandi untuk otentikasi dasar seperti: request.authorization.usernameatau request.authorization.password.
Karthic Raghupathi
1
@Karthic Raghupathi, selama header tidak memiliki karakter ilegal seperti tanda hubung, yang dilakukan sebagian besar header (yaitu, X-Api-Key), dalam hal ini Anda perlu mengaksesnya seperti kamus dengan kunci.
Blairg23
1
@ Abhijeet: ... atau Anda bisa menggunakan kode yang saya sarankan di komentar saya sebelumnya. Jauh lebih bersih.
Michael Scheper
5
Header labu bukan dict, ya? ... saya melihat mereka kembali sebagai werkzeug.datastructures.EnvironmentHeaders dalam pengujian saya. werkzeug.pocoo.org/docs/0.14/datastructures/…
Pandem1c
15

Catat saja, Perbedaan antara metode adalah, jika header tidak ada

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

akan kembali Noneatau tidak terkecuali, sehingga Anda dapat menggunakannya seperti

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

tetapi yang berikut akan menimbulkan kesalahan

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

Anda bisa mengatasinya dengan

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

Jika ada yang mencoba mengambil semua tajuk yang disahkan maka cukup gunakan:

dict(request.headers)

itu memberi Anda semua header di sebuah dikt dari mana Anda benar-benar dapat melakukan operasi apa pun yang Anda inginkan. Dalam kasus penggunaan saya, saya harus meneruskan semua header ke API lain karena API python adalah proxy

iam.Carrot
sumber
2
@ JamieLindsey Ini tidak benar. request.headerssebenarnya adalah EnvironHeadersobjek yang dapat diakses seperti kamus. werkzeug.palletsprojects.com/en/1.0.x/datastructures/…
jasonrhaas
2

Mari kita lihat bagaimana kita mendapatkan params, header, dan tubuh di Flask. Saya akan menjelaskan dengan bantuan tukang pos.

masukkan deskripsi gambar di sini

Kunci dan nilai params tercermin dalam titik akhir API. misalnya key1 dan key2 di titik akhir: 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

Setelah params, sekarang mari kita lihat cara mendapatkan header :

masukkan deskripsi gambar di sini

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

Sekarang mari kita lihat bagaimana cara mendapatkan tubuh

masukkan deskripsi gambar di sini

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

jadi kami mengambil file yang diunggah dengan request.files dan teks dengan request.form

Ajeet Verma
sumber