Làm thế nào để có được tiêu đề http trong bình?


199

Tôi là người mới chơi python và sử dụng Python Flask và tạo dịch vụ API REST.

Tôi muốn kiểm tra tiêu đề ủy quyền được gửi cho khách hàng.

Nhưng tôi không thể tìm cách lấy tiêu đề HTTP trong bình.

Bất kỳ trợ giúp để có được ủy quyền tiêu đề HTTP được đánh giá cao.



Câu trả lời:


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

request.headers hoạt động như một từ điển, vì vậy bạn cũng có thể nhận được tiêu đề của mình như với bất kỳ từ điển nào:

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

1
Cảm ơn sự giúp đỡ nhanh chóng @sanyi
emil

9
FYI: Tôi đang xem vào jar.pocoo.org/snippets/8 và có vẻ như bạn cũng có thể truy cập tên người dùng và mật khẩu để xác thực cơ bản như vậy: request.authorization.usernamehoặc request.authorization.password.
Karthic Raghupathi

1
@Karthic Raghupathi, miễn là tiêu đề không có các ký tự không hợp lệ như dấu gạch ngang, mà hầu hết các tiêu đề đều làm (ví dụ: X-Api-Key), trong trường hợp đó bạn cần truy cập nó như một từ điển có khóa.
Blairg23

1
@Abhijeet: ... hoặc bạn chỉ có thể sử dụng mã mà tôi đã đề xuất trong nhận xét trước đây của tôi. Sạch sẽ hơn nhiều.
Michael Scheper

5
Tiêu đề Flask không phải là một dict, yeah? ... tôi thấy chúng trở lại dưới dạng werkzeug.datastructures.EnvirHeaders trong các thử nghiệm của tôi. werkzeug.pocoo.org/docs/0.14/datastructures/ từ
Pandem1c

15

chỉ cần lưu ý, Sự khác nhau giữa các phương thức là, nếu tiêu đề không tồn tại

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

sẽ trở lại Nonehoặc không có ngoại lệ, vì vậy bạn có thể sử dụng nó như

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

nhưng sau đây sẽ gây ra lỗi

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

Bạn có thể xử lý nó bằng cách

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

13

Nếu bất kỳ ai đang cố gắng tìm nạp tất cả các tiêu đề đã được thông qua thì chỉ cần sử dụng:

dict(request.headers)

nó cung cấp cho bạn tất cả các tiêu đề trong một dict mà từ đó bạn thực sự có thể làm bất cứ điều gì bạn muốn. Trong trường hợp sử dụng của tôi, tôi đã phải chuyển tiếp tất cả các tiêu đề sang một API khác vì API python là một proxy


2
@JamieLindsey Điều này không đúng. request.headersthực sự là một EnvironHeadersđối tượng có thể được truy cập như một từ điển. werkzeug.palletsprojects.com/en/1.0.x/datastructures/
Kẻ

2

Chúng ta hãy xem làm thế nào chúng ta có được các thông số, tiêu đề và cơ thể trong Flask. Tôi sẽ giải thích với sự giúp đỡ của người đưa thư.

nhập mô tả hình ảnh ở đây

Các khóa và giá trị params được phản ánh trong điểm cuối API. ví dụ key1 và key2 ở điểm cuối: 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

Sau các thông số, bây giờ chúng ta hãy xem làm thế nào để có được các tiêu đề :

nhập mô tả hình ảnh ở đây

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

Bây giờ hãy xem làm thế nào để có được cơ thể

nhập mô tả hình ảnh ở đây

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

vì vậy chúng tôi tìm nạp các tệp đã tải lên với request.files và văn bản với request.form

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.