如何获取python请求中的cookie信息?

如何获取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

我正试图写一个小脚本,让我看到我的网站设置的cookies相关信息

我想知道它是否设置了
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是否包含非标准属性,尽管类似于so
cookie.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