如何获取python请求中的cookie信息?
我正试图写一个小脚本,让我看到我的网站设置的cookies相关信息 我想知道它是否设置了如何获取python请求中的cookie信息?,python,cookies,python-requests,Python,Cookies,Python Requests,我正试图写一个小脚本,让我看到我的网站设置的cookies相关信息 我想知道它是否设置了secure或httpOnly标志。但到目前为止,我还不能做到这一点,我只知道如何获取cookie名称和值。这是我目前的代码: r = requests.post('url', data=data, headers=headers) for (name, cookie) in r.cookies.items(): print name, cookie 到目前为止,这还可以,但我想获得与cookie
secure
或httpOnly
标志。但到目前为止,我还不能做到这一点,我只知道如何获取cookie名称和值。这是我目前的代码:
r = requests.post('url', data=data, headers=headers)
for (name, cookie) in r.cookies.items():
print name, cookie
到目前为止,这还可以,但我想获得与cookie相关的信息,而不是值本身。Cookie元数据,如果您愿意的话
如何实现这一点?您可以分别从每个cookie中提取信息:
import requests
r = requests.post('http://www.about.com')
for cookie in r.cookies:
print(cookie.__dict__)
print(cookie.secure)
这是因为r.cookies
是requestScookejar
的一个实例,它扩展自CookieJar
(Python 2:cookielib.CookieJar
,Python 3:http.CookieJar.CookieJar
)。CookieJar
具有Cookie
对象
参考文献:
- cookielib:
- cookielib.Cookie.secure:
Cookie
对象检索httponly
值的方法。在Python 3中,您可以通过字典定义Morsel
对象,它将httponly
视为cookie()的标准属性,但我在定义规范RFC2109()中找不到任何对httponly
的引用
也就是说,如果httponly
实际上是一个非标准属性,那么您可以使用以下内容来检查cookie是否具有该属性:
cookie.has_nonstandard_attr('httponly')
在Python 3下,我无法从以下位置检索httponly
标志:
cookie.get_nonstandard_attr('httpOnly')
及
返回False
,即使cookie中包含httpOnly
标志
这对httponly
、httponly
等的任何变体都不起作用
使用@HEADLESS\u 0NE的帖子,我发现您可以通过查看cookie中的\u rest
字段来检索标志。如果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检索。安全您只需在r中为cookie添加。cookies:
,您也不需要导入打印功能(nice:),但我发现它不适用于httpOnly
。至少不是在2.7上。有没有办法达到这个目标?@RodrigoSasaki,我不完全确定这一点,但根据RFC2109(),似乎httponly
不是cookie中所期望的标准属性的一部分。您可以检查cookie是否包含非标准属性,尽管类似于socookie.has_nonstandard\u attr('httponly')
。尽管有相互矛盾的证据表明httponly
也可能有效(参见:)。只是在RFC2109文档中找不到对它的引用。@HEADLESS\u 0NE,我明白了。。我真的很好奇,但从现在起我可以照顾它:)谢谢你的帮助!cookie.has\u nonstandard\u attr
最初可能不起作用,因为它似乎对Python用于HttpOnly
的大小写做了一些更改。Mixed case当前是正确的,并且在几个版本之前进行了更新。
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