【问题标题】:Struggling to retrieve csrf token from a cookiejar object努力从 cookiejar 对象中检索 csrf 令牌
【发布时间】:2015-01-09 00:07:37
【问题描述】:

我正在使用基于this answer 的以下代码将身份验证cookie 存储在文件中。这让我可以避免每次运行程序时都必须登录。

现在,从常规会话 cookie 中获取 csrftoken 效果很好,但是当我尝试使用 csrf = s.cookies['csrftoken'] 从 cookiejar 中获取它时,我得到了

AttributeError: LWPCookieJar instance has no attribute '__getitem__'`

我知道发生这种情况是因为我将 s.cookies 视为一个列表,即使它现在是一个 LWPCookieJar 对象。我想这给我留下了两个选择:

要么:

  • LWPCookieJar对象中提取列表,然后获取csrf令牌很容易。
  • 或者,找到适当的语法以直接从LWPCookieJar 中检索 csrf 令牌。

我该怎么做?


import os
import requests
from cookielib import LWPCookieJar

s = requests.Session()
s.cookies = LWPCookieJar('cookiejar')
if os.path.exists('cookiejar'):
    # Load saved cookies from the file and use them in a request
    print('loading saved cookies')
    s.cookies.load()        
else:
    # Create a new cookies file and set our Session's cookies
    print('saving cookies')
    s.cookies.save()
r = s.get('http://httpbin.org/cookies')
print(r.text)
# Save the session's cookies back to the file
s.cookies.save()

【问题讨论】:

  • 你能跑dir(s.cookies)吗?
  • @IanAuld:是的。它返回一个很长的列表。
  • 这个列表包含了该对象的所有属性和方法。里面有没有听起来像它会做你想做的事?

标签: python cookies csrf cookiejar


【解决方案1】:

我终于明白了。不确定是否可以进一步简化。

import os, requests
from cookielib import LWPCookieJar

def login():
    global s
    s = requests.Session()
    if os.path.exists('cookiejar'):
        print('Cookies exist! Fast login.\r'),
        global csrf
        with open('cookiejar') as f:
            s.cookies = requests.utils.cookiejar_from_dict(pickle.load(f))
        csrf = s.cookies['csrftoken']
        print('csrf: {0}').format(csrf) # Debug information
    else:
        print('Cookies do not exist. Slow login.\r'),
        s.get('http://www.example.com/') # to get csrf
        csrf = s.cookies['csrftoken']
        data= dict(csrftoken=csrf, username="user", password="pass")
        s.post('https://www.example.com/login/', data=data, headers=headers)
        with open('cookiejar', 'w') as f:
            pickle.dump(requests.utils.dict_from_cookiejar(s.cookies), f)

【讨论】:

    猜你喜欢
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2015-05-10
    • 2015-10-25
    • 2019-07-22
    • 2014-01-25
    相关资源
    最近更新 更多