วิธีการได้รับส่วนหัว http ในขวด?


200

ฉันเป็นมือใหม่กับงูใหญ่และใช้ Python Flask และสร้างบริการ REST API

ฉันต้องการตรวจสอบส่วนหัวการอนุญาตที่ส่งให้ลูกค้า

แต่ฉันไม่สามารถหาวิธีที่จะได้รับส่วนหัว HTTP ในขวด

ความช่วยเหลือใด ๆ สำหรับการขออนุมัติ HTTP ส่วนหัวจะได้รับการชื่นชม



นอกจากนี้ยังเห็นขวด Quickstartและเอกสาร API
Martijn Pieters

คำตอบ:


300
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
Karthic Raghupathi

1
@Karthic Raghupathi ตราบใดที่ส่วนหัวไม่มีอักขระที่ผิดกฎหมายเช่นเครื่องหมายขีดกลางซึ่งส่วนใหญ่ทำ (เช่น X-Api-Key) ซึ่งในกรณีนี้คุณต้องเข้าถึงมันเหมือนพจนานุกรมที่มีกุญแจ
Blairg23

1
@Abhijeet: ... หรือคุณสามารถใช้รหัสที่ฉันแนะนำในความคิดเห็นก่อนหน้าของฉัน ทำความสะอาดมาก
Michael Scheper

5
ส่วนหัวของขวดไม่ใช่ dict ใช่มั้ย ... ฉันเห็นพวกเขากลับมาเป็น werkzeug.datastructures โครงสร้างสิ่งแวดล้อมในการทดสอบของฉัน 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 อื่นเนื่องจาก python API เป็นพร็อกซี


2
@JamieLindsey นี่ไม่เป็นความจริง request.headersจริงๆแล้วเป็นEnvironHeadersวัตถุที่สามารถเข้าถึงได้เช่นพจนานุกรม werkzeug.palletsprojects.com/en/1.0.x/datastructures/…
jasonrhaas

2

เรามาดูกันว่าเราได้รับส่วนหัวและร่างกายใน Flask อย่างไร ฉันจะอธิบายด้วยความช่วยเหลือของบุรุษไปรษณีย์

ป้อนคำอธิบายรูปภาพที่นี่

คีย์และค่าพารามิเตอร์จะปรากฏในจุดสิ้นสุดของ 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

หลังจาก params ตอนนี้เรามาดูวิธีการรับส่วนหัว :

ป้อนคำอธิบายรูปภาพที่นี่

  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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.