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

2024-05-13 00:45:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想知道它是否设置了securehttpOnly标志。但到目前为止我还没能做到,我只知道如何获得cookie的名称和值。这是我当前的代码:

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

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

到目前为止,这个方法还不错,但我想获得与cookies相关的信息,而不是值本身。Cookie元数据。

我怎样才能做到?


Tags: 代码name脚本名称信息data网站cookie
2条回答

您可以分别从每个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个对象。

参考资料:

更新: 我还没有找到从Cookie对象检索httponly值的方法。在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')

在Python 3下,我无法从以下位置检索httpOnly标志:

cookie.get_nonstandard_attr('httpOnly')

以及

cookie.has_nonstandard_attr('httpOnly')

即使cookie中包含httpOnly标志,也返回False

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

使用@HEADLESS@u 0NE的post,我发现您可以通过查看cookie.__dict__中的_rest字段来检索标志。如果cookie中包含httpOnly

cookie.__dict__['_rest']

将返回如下内容:

{'HttpOnly': None, ...}

因此,这里有一个小的helper函数来检查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检索。

相关问题 更多 >