【问题标题】:Python how to preserve HTTP cookiesPython如何保存HTTP cookie
【发布时间】:2012-11-30 04:55:33
【问题描述】:

我用这件作品来

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并使用它

非常感谢

【问题讨论】:

    标签: python cookies httprequest urllib2 cookielib


    【解决方案1】:

    我强烈推荐使用 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
    

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

    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

    edit 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) 可能更方便。

    【讨论】:

    • 嗨 Anorov,也许我不清楚我的问题。我在问,程序结束后,当我启动一个新程序时,我可以从磁盘重新加载cookie并使用它,而无需重新登录。
    • Requests 非常棒。很好的建议:)
    • 谢谢阿诺罗夫。最后一个问题,我会接受你的回答。如何设置 CookieJar 对象的过期时间?我阅读了您指向的链接,但是我无法理解 CookieJar 对象和 Cookie 对象之间的区别
    • CookieJar 充当 Cookie 对象的包装器集合,并添加了一些方法。 Cookie 是一个单独的类,可以在这里找到:docs.python.org/2/library/cookie.html
    • 为什么要设置自己的过期时间?如果您想查看服务器发送的原始 cookie 是否已过期,您可以在它们上使用is_expired()。您应该只在检查从文件加载的 cookie 时才需要这样做。
    猜你喜欢
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多