我正在尝试编写一个小脚本,以便查看与我的网站设置的Cookie相关的信息。
我想知道它们是否设置了secure
或httpOnly
标志。但到目前为止我无法做到这一点,我只想出了如何获取cookie名称和值。这是我目前的代码:
r = requests.post('url', data=data, headers=headers)
for (name, cookie) in r.cookies.items():
print name, cookie
到目前为止,这种方法很好,但我希望将信息相关提供给Cookie,而不是值本身。如果你愿意,可以使用Cookie元数据。
我怎样才能做到这一点?
答案 0 :(得分:7)
您可以单独从每个Cookie中提取信息:
import requests
r = requests.post('http://www.about.com')
for cookie in r.cookies:
print(cookie.__dict__)
print(cookie.secure)
这是因为r.cookies
是RequestsCookieJar
的一个实例,它扩展自CookieJar
(Python 2:cookielib.CookieJar
,Python 3:http.cookiejar.CookieJar
)。 CookieJar
有Cookie
个对象。
<强>参考文献:强>
<强>更新强>
我还没有找到从httponly
对象中检索Cookie
值的方法。在Python 3中,您可以通过字典定义Mosel
对象,并将httponly
视为cookie的标准属性(https://docs.python.org/3/library/http.cookies.html),但我找不到任何引用定义规范RFC2109(https://www.ietf.org/rfc/rfc2109.txt)中的httponly
。
也就是说,如果httponly
实际上是非标准属性,那么您可以使用以下内容来检查cookie是否包含它:
cookie.has_nonstandard_attr('httponly')
答案 1 :(得分:0)
在Python 3下,我无法从以下位置检索httpOnly
标志:
cookie.get_nonstandard_attr('httpOnly')
和
cookie.has_nonstandard_attr('httpOnly')
即使False
标志已包含在cookie中,也会返回httpOnly
。
这也不适用于httponly
,HttpOnly
等的任何变体。
使用@ HEADLESS_0NE的帖子,我发现您可以通过查看_rest
中的cookie.__dict__
字段来检索该标志。如果Cookie中包含httpOnly
,则
cookie.__dict__['_rest']
将返回如下内容:
{'HttpOnly': None, ...}
因此,这是一个小的辅助函数,用于检查cookie是否具有httpOnly
标志。
def has_http_only(cookie):
extra_args = cookie.__dict__.get('_rest')
if extra_args:
for key in extra_args.keys():
if key.lower() == 'httponly':
return True
return False
安全标记会自动添加到cookie
对象中,并且可以使用cookie.secure
进行检索。