python - 使用请求库获取cookie到期时间

use*_*963 2 python cookies python-requests

我试图获取从服务器检索的特定cookie的到期时间:

s = requests.session()
r = s.get("http://localhost/test")
r.cookies
Run Code Online (Sandbox Code Playgroud)

这将列出服务器发送的所有cookie(我得到2个cookie):

<<class 'requests.cookies.RequestsCookieJar'>[<Cookie PHPSESSID=cusa6hbtb85li8po
argcgev221 for localhost.local/>, <Cookie WebSecu=f for localhost.local/test>]>
Run Code Online (Sandbox Code Playgroud)

当我做:

r.cookies.keys
Run Code Online (Sandbox Code Playgroud)

我明白了:

<bound method RequestsCookieJar.items of <<class 'requests.cookies.RequestsCooki
eJar'>[Cookie(version=0, name='PHPSESSID', value='30tg9vn9376kmh60ana2essfi3', p
ort=None, port_specified=False, domain='localhost.local', domain_specified=False
, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires
=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False), Co
okie(version=0, name='WebSecu', value='f', port=None, port_specified=False, doma
in='localhost.local', domain_specified=False, domain_initial_dot=False, path='/test', path_specified=False, secure=False, expires=1395491371, discard=Fals
e, comment=None, comment_url=None, rest={}, rfc2109=False)]>>
Run Code Online (Sandbox Code Playgroud)

如您所见,我们有两个cookie.我想获得名为"WebSecu"的cookie的到期时间

谢谢

Ian*_*sco 10

requests,饼干罐是一个非常特殊的对象.您可能会注意到,如果您这样做:

r.cookies['WebSecu']
Run Code Online (Sandbox Code Playgroud)

您将以字符串形式接收该cookie的值(在您的示例中f).要获取保存该信息的实际cookie对象,您必须迭代cookie jar,如下所示:

expires = None
for cookie in r.cookies:
    if cookie.name == 'WebSecu':
        expires = cookie.expires
Run Code Online (Sandbox Code Playgroud)

  • 更“Pythonic”的方式:`expires = next(x for x in r.cookies if x.name == 'WebSecu').expires` (2认同)
  • 'Pythonic' 是一个被试图听起来优越的人胡说八道的词。如果“Pythonic”意味着任何有价值的东西,那就意味着“易于理解”。如果你要给某人你的单行和上面的 for 循环,大多数人需要花额外的时间来理解单行。(尤其是大多数试图从该站点学习的人。) (2认同)
  • 我遵循了这个方法,虽然我的 SESSION_COOKIE_AGE 是 3600 我得到 1510315939,这不是毫秒,这是什么?好像和我的 SESSION_COOKIE_AGE 无关。 (2认同)
  • @DidinaDeen这是作为时间戳记的到期日期。从datetime导入datetime做`; print(datetime.fromtimestamp(expires))将其视为人类可以理解的日期和时间。 (2认同)