【问题标题】:How to parse requests.session cookie attributes in python如何在python中解析requests.session cookie属性
【发布时间】:2019-03-29 21:22:04
【问题描述】:

我正在编写一个 python 3 脚本来检查我正在处理的网站上 cookie 的特定属性。我目前使用requests.session 对站点进行身份验证:

SiteLogin = 'https://mytestsite.com/login'
payload = {'username': USER, 'password': PASSWORD}
s = requests.session()
s.post(SiteLogin, data=payload)
s.cookies

现在,cookie 具有许多属性,包括名称、域、有效期等。我无法找到一种方法将所有属性实际公开为给定 cookie 的字典,以便解析出预期值。

有没有我错过的方法?

编辑

更新以澄清我所看到的:

>>> s.cookies
<RequestsCookieJar[Cookie(version=0, name='COOKIE_NAME', value='COOKIE_VALUE', port=None, port_specified=False, domain='DOMAIN, domain_specified=False, domain_initial_dot=False, path='PATH', path_specified=True, secure=True, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)]>
>>> print(s.cookies)
<RequestsCookieJar[<Cookie 'COOKIE_NAME'='COOKIE_VALUE' for DOMAIN+PATH>]>
>>> print(s.cookies.get_dict())
{'COOKIE_NAME': 'COOKIE_VALUE'}

所以,假设我想获取每个 cookie 的“过期”值(请注意上面的内容,这可以通过运行 s.cookies 获得)。如何仅访问到期值?如果我的系统上有很多 cookie,是否可以遍历所有 cookie,并检查每个 cookie 的到期时间?

类似:

>>> s.cookies['expires']
None

【问题讨论】:

  • 那么你是想修改会话中的cookies还是打印出来?
  • 打印它们没问题。找不到将它们作为单个属性访问的好方法。
  • 太好了,我刚刚提交了答案。

标签: python python-3.x python-requests cookiejar


【解决方案1】:

因此,为了只打印 cookie,您可以尝试实现以下代码:

payload = {'username': USER, 'password': PASSWORD}
s = requests.session()
s.post(SiteLogin, data=payload)
list(s.cookies)

希望对你有帮助

【讨论】:

  • 所以,当我运行 s.cookies.get_dict() 时,我得到的是:{'CookieName':'CookieValue'} 我没有得到域、路径等(由s.cookies)。有没有办法让我单独获取“域”属性,或 s.cookies 显示的任何其他属性?
  • 因此,如果您在执行 print(s.cookies) 时获得域和路径,但在执行 print(s.cookies.get_dict()) 时您只会获得 {'CookieName':'CookieValue'}
  • 所以,我尝试了一些东西: >>> s.cookies # 返回所有属性,包括域、过期、路径等 >>> print(s.cookies) # Returns 'CookieName' ='CookieValue' for 'Domain'' >>> print(s.cookies.get_dict()) # Returns {'CookieName':'CookieValue'} 我想获取 s.cookie 每个 cookie 返回的任何单个属性.例如,获取每个 cookie 的所有“过期”属性。我希望有一种方法可以遍历每个 cookie 的字典,并评估属性。
  • 您能否编辑您的问题,添加您当前的输出和所需的输出,这将有很大帮助!
  • 已编辑。感谢 Fozoro 的帮助!
【解决方案2】:

因此,根据 Fozoro 的回答找到了解决方案。 cookiejar 中的 cookie 对象包含我感兴趣的成员属性。

payload = {'username': USER, 'password': PASSWORD}
s = requests.session()
s.post(SiteLogin, data=payload)
for cookie in list(s.cookies):
    print(cookie.expires)

【讨论】:

    【解决方案3】:

    为了将来参考,我建议您使用documentation 中建议的以下语法:

    s.cookies.get('expires')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      相关资源
      最近更新 更多