フラスコでhttpヘッダーを取得する方法?


199

私はpythonの初心者で、Python Flaskを使用してREST APIサービスを生成しています。

クライアントに送信される認証ヘッダーを確認したい。

しかし、フラスコでHTTPヘッダーを取得する方法が見つかりません。

HTTPヘッダー認証を取得するためのヘルプがありがたいです。



回答:


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

request.headers 辞書のように動作するので、他の辞書と同じようにヘッダーを取得できます。

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

1
助けてくれてありがとう@sanyi
emil

9
参考までにフラスコ.pocoo.org / snippets / 8を見ていると、次のような基本認証のためにユーザー名とパスワードにアクセスできるようです:request.authorization.usernameまたはrequest.authorization.password
Karthic Raghupathi 2015年

1
@Karthic Raghupathi。ただし、ヘッダーにダッシュなどの不正な文字が含まれていない限り、ほとんどのヘッダーはそのように機能します(つまり、X-Api-Key)。この場合、キーを持つ辞書のようにアクセスする必要があります。
Blairg23

1
@Abhijeet:...または、以前のコメントで提案したコードを使用することもできます。ずっときれい。
マイケルシェパー、

5
フラスコヘッダーはディクテーションではありませんね。 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)

それはあなたがあなたが望むどんな操作でも実際に行うことができるdictのすべてのヘッダーを提供します。私のユースケースでは、Python APIがプロキシだったので、すべてのヘッダーを別のAPIに転送する必要がありました


2
@JamieLindseyこれは真実ではありません。 request.headers実際にはEnvironHeaders、辞書のようにアクセスすることができるオブジェクト。 werkzeug.palletsprojects.com/en/1.0.x/datastructures/...
jasonrhaas

2

Flaskでパラメーター、ヘッダー、ボディを取得する方法を見てみましょう。郵便配達員の助けを借りて説明します。

ここに画像の説明を入力してください

paramsキーと値は、APIエンドポイントに反映されます。たとえば、エンドポイントのkey1とkey2:https ://127.0.0.1/upload ?キー1 = VALUE1&キー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.filesで、テキストをrequest.formでフェッチします

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.