我使用requests发送请求。
import requests
def print(req):
print('{}\n{}\n{}\n\n{}'.format(
'-----------START-----------',
req.method + ' ' + req.url,
'\n'.join('{}: {}'.format(k, v) for k, v in req.headers.items()),
req.body,
))
print "----------END------------"
try:
req = requests.Request('GET',
'https://myip/myproject/upload/token',
headers={'Authorization': 'Token 401f7ac837a',
})
prepared = req.prepare()
print(prepared)
except Exception as e:
print "Exception:", e
输出:
-----------START-----------
GET https://myip/myproject/upload/token
Authorization: Token 401f7ac837a
None
----------END------------
但在我打印request.META之后,还有
META:{u'CSRF_COOKIE': u'YGzoMaNEQJz1Kg8yXAwjJt6yNuT9L'
什么设置CSRF_COOKIE? 欢迎任何评论。感谢
更新
(1) 从doc,它说此cookie由CsrfViewMiddleware 设置,这意味着CSRF cookie在后端设置并在响应中设置为前端(CSRF cookie:server - >浏览器)。为什么它还说对于所有未使用HTTP GET,HEAD,OPTIONS或TRACE的传入请求,必须存在CSRF cookie ?为什么它出现在我的请求中.META? (CSRF cookie:浏览器 - >服务器???)
(2) 它说**在所有传出的POST表单中都有一个名为'csrfmiddlewaretoken'的隐藏表单字段。该字段的值是CSRF cookie的值。
这部分由模板标签完成。 **
模板标签的时间和方式如何?
答案 0 :(得分:0)
这是一个标准的cookie Django应用程序为每个新用户启动,以防止Cross Site Forgery。
设置为随机值的CSRF cookie(与会话无关 nonce,因为它被称为),其他网站将无法访问。
此cookie由CsrfViewMiddleware设置。这是永久的, 但由于没有办法设置一个永不过期的cookie,它就是 发送每个已拨打的回复 django.middleware.csrf.get_token()(内部使用的函数) 检索CSRF令牌。
出于安全原因,每次更改CSRF cookie的值 用户登录的时间。
更多阅读
https://docs.djangoproject.com/en/1.9/ref/csrf/#how-it-works