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

时间:2016-06-08 18:30:06

标签: python cookies python-requests

我正在尝试编写一个小脚本,以便查看与我的网站设置的Cookie相关的信息。

我想知道它们是否设置了securehttpOnly标志。但到目前为止我无法做到这一点,我只想出了如何获取cookie名称和值。这是我目前的代码:

r = requests.post('url', data=data, headers=headers)

for (name, cookie) in r.cookies.items():
    print name, cookie

到目前为止,这种方法很好,但我希望将信息相关提供给Cookie,而不是值本身。如果你愿意,可以使用Cookie元数据。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:7)

您可以单独从每个Cookie中提取信息:

import requests

r = requests.post('http://www.about.com')

for cookie in r.cookies:
    print(cookie.__dict__)
    print(cookie.secure)

这是因为r.cookiesRequestsCookieJar的一个实例,它扩展自CookieJar(Python 2:cookielib.CookieJar,Python 3:http.cookiejar.CookieJar)。 CookieJarCookie个对象。

<强>参考文献:

<强>更新 我还没有找到从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

这也不适用于httponlyHttpOnly等的任何变体。

使用@ 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进行检索。