1. ホーム
  2. python

[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?

2022-07-12 08:01:26

質問

Django のリクエストヘッダをすべて取得する必要があります。私が読んだところでは、Django は単にすべてを request.META 変数に、他の多くのデータと一緒にダンプします。を取得する最良の方法は何でしょう? すべて を取得する最良の方法は何でしょうか?

私はこれらを使って httplib のリクエストに使います。

どのように解決するのですか?

によると のドキュメントによると request.META は、利用可能な全ての HTTP ヘッダを含む "標準の Python 辞書です。もしあなたが 全て を取得したい場合は、単純にこの辞書を繰り返し実行します。

コードのどの部分でこれを行うかは、あなたの正確な要件に依存します。このような場合 request にアクセスできる場所であれば、どこでもかまいません。

更新

<ブロッククオート

ミドルウェアのクラスでアクセスする必要がありますが、それを反復処理すると、HTTPヘッダとは別の多くの値が得られます。

ドキュメントからです。

例外として CONTENT_LENGTHCONTENT_TYPE である場合、上記のように任意の HTTP ヘッダは META キーに変換します。このとき、すべての文字を大文字に変換し、ハイフンをアンダースコアに、そして を追加し HTTP_ というプレフィックスをつける .

(強調)

を取得するために HTTP ヘッダだけを取得するには、単にプレフィックスが HTTP_ .

アップデート 2

HTTP_ で始まるすべてのキーを request.META 変数からフィルタリングし、先頭の HTTP_ 部分を取り除いて、ヘッダーの辞書を構築する方法を教えてください。

もちろん、ここにその方法の1つがあります。

import re
regex = re.compile('^HTTP_')
dict((regex.sub('', header), value) for (header, value) 
       in request.META.items() if header.startswith('HTTP_'))