Mri*_*lla 93 python django httprequest http-headers
我需要获取所有Django请求标头.根据我的阅读,Django只需将所有内容request.META
与其他数据一起转储到变量中.获取客户端发送到我的Django应用程序的所有头文件的最佳方法是什么?
我将使用这些来构建httplib
请求.
Man*_*dan 129
根据文档 request.META
是"包含所有可用HTTP标头的标准Python字典".如果你想获得所有标题,你可以简单地遍历字典.
您执行此操作的代码部分取决于您的确切要求.任何有权访问的地方都request
应该这样做.
更新
我需要在Middleware类中访问它,但是当我迭代它时,除了HTTP头之外,我获得了很多值.
从文档:
除了
CONTENT_LENGTH
和之外CONTENT_TYPE
,如上所述,HTTP
请求中的任何标头都将转换为META
键,方法是将所有字符转换为大写,用下划线替换任何连字符并在名称中添加HTTP_
前缀.
(重点补充)
要HTTP
单独获取标题,只需使用前缀为的键进行过滤HTTP_
.
更新2
你能告诉我如何通过过滤掉以HTTP_开头的request.META变量并删除前导HTTP_部分的所有键来构建标题字典.
当然.这是一种方法.
import re
regex = re.compile('^HTTP_')
dict((regex.sub('', header), value) for (header, value)
in request.META.items() if header.startswith('HTTP_'))
Run Code Online (Sandbox Code Playgroud)
Dav*_*her 17
这是另一种方法,非常类似于Manoj Govindan的回答:
import re
regex_http_ = re.compile(r'^HTTP_.+$')
regex_content_type = re.compile(r'^CONTENT_TYPE$')
regex_content_length = re.compile(r'^CONTENT_LENGTH$')
request_headers = {}
for header in request.META:
if regex_http_.match(header) or regex_content_type.match(header) or regex_content_length.match(header):
request_headers[header] = request.META[header]
Run Code Online (Sandbox Code Playgroud)
这也将获取CONTENT_TYPE
和CONTENT_LENGTH
请求标题以及HTTP_
那些标题.request_headers['some_key]
== request.META['some_key']
.
如果您需要包含/省略某些标题,请相应地进行修改.Django在这里列出了一堆,但不是全部:https : //docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.META
Django的请求标头算法:
-
用下划线替换连字符_
HTTP_
到所有的头在原来的要求,除了CONTENT_TYPE
和CONTENT_LENGTH
.每个标题的值应该是未修改的.
Dan*_*per 15
从Django 2.2开始,您可以request.headers
用来访问HTTP标头。从HttpRequest.headers的文档中:
不区分大小写,类似于dict的对象,可从请求中访问所有HTTP前缀的标头(加上Content-Length和Content-Type)。
每个标题的名称在显示时都带有标题框(例如User-Agent)。您可以不区分大小写地访问标头:
Run Code Online (Sandbox Code Playgroud)>>> request.headers {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6', ...} >>> 'User-Agent' in request.headers True >>> 'user-agent' in request.headers True >>> request.headers['User-Agent'] Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) >>> request.headers['user-agent'] Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) >>> request.headers.get('User-Agent') Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) >>> request.headers.get('user-agent') Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
要获取所有标题,可以使用request.headers.keys()
或request.headers.items()
。
简单地说,您可以从Django 2.2开始使用HttpRequest.headers。以下示例直接取自请求和响应对象部分下的官方Django 文档。
>>> request.headers
{'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6', ...}
>>> 'User-Agent' in request.headers
True
>>> 'user-agent' in request.headers
True
>>> request.headers['User-Agent']
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
>>> request.headers['user-agent']
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
>>> request.headers.get('User-Agent')
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
>>> request.headers.get('user-agent')
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
Run Code Online (Sandbox Code Playgroud)
小智 5
request.META.get( 'HTTP_AUTHORIZATION')
/python3.6/site-packages/rest_framework/authentication.py
你可以从这个文件中获得...
归档时间: |
|
查看次数: |
95121 次 |
最近记录: |