5

我用这件作品

cj = cookielib.LWPCookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
urllib2.install_opener(opener)

// ..... log in with username and password. 
// urllib2.urlopen() to get the stuff I need. 

现在,我如何保存 cookie 并将过期日期设置为永远,这样下次我就不必再次使用用户名和密码登录了。可以直接用urllib2.urlopen()吗?

“下一次”是指程序结束后,当我启动一个新程序时,我可以从磁盘重新加载 cookie 并使用它

非常感谢

4

1 回答 1

7

我强烈推荐使用 Requests HTTP 库。它会为你处理这一切。

http://docs.python-requests.org/en/latest/

import requests
sess = requests.session()
sess.post("http://somesite.com/someform.php", data={"username": "me", "password": "pass"})
#Everything after that POST will retain the login session
print sess.get("http://somesite.com/otherpage.php").text

编辑:要将会话保存到磁盘,有很多方法。您可以执行以下操作:

from requests.utils import cookiejar_from_dict as jar
cookies = jar(sess.cookies)

然后阅读以下文档。您可以将其转换为 FileCookieJar 并将 cookie 保存到文本文件中,然后在程序开始时加载它们。

http://docs.python.org/2/library/cookielib.html#cookiejar-and-filecookiejar-objects

或者,您可以腌制 dict 并将该数据保存到文件中,然后使用pickle.load(file).

http://docs.python.org/2/library/pickle.html

编辑 2:要处理过期,您可以按如下方式遍历 CookieJar。cj被假定为以某种方式获得的 CookieJar。

for cookie in cj:
    if cookie.is_expired():
        #re-attain session

要检查是否有任何 cookie 过期,这样做可能更方便if any(c.is_expired() for c in cj)

于 2012-11-30T04:58:19.230 回答