【问题标题】:Python import cookies [duplicate]Python导入cookies [重复]
【发布时间】:2012-06-07 04:19:13
【问题描述】:

可能重复:
python: urllib2 how to send cookie with urlopen request

如果我的浏览器中有 cookie,我如何让 python 脚本将这些保存的 cookie 用于 url 请求?

对于一个特定的站点,我正在寻找一种方法让我的 python 脚本获取我的身份(当我在浏览器上登录时),然后向服务器发出请求。它不需要从磁盘读取 cookie,而是我想做这样的事情:

cookies = {"username": "USERNAME", "session": "xxxxxxx"...}
urlopen(url, cookies=cookies) # I know that this doesn't work, just showing you what I intend to do

有没有简单的方法可以做到这一点?

【问题讨论】:

    标签: python http url authentication cookies


    【解决方案1】:

    Cookielib 是您的朋友。但您需要从浏览器获取更多信息,而不仅仅是 cookie 名称和值:

    cookies = {"username": "USERNAME", "session": "xxxxxxx"...}
    

    如果您提供这些值,您应该能够在您的请求中重新创建会话:

    cookies = [{
        "name": "username",
        "value": "USERNAME",
        "domain": "domain",
        "path": "path",
        "secure": "secure",
    }]
    

    重新创建会话:

    import cookielib
    import urllib2
    
    cj = cookielib.CookieJar()
    
    for cookie in cookies:
        c = cookielib.Cookie(version=1,
                             name=cookie["name"],
                             value=cookie["value"],
                             port=None,
                             port_specified=False,
                             domain=cookie["domain"],
                             domain_specified=False,
                             domain_initial_dot=False,
                             path=cookie["path"],
                             path_specified=True,
                             secure=cookie["secure"],
                             expires=None,
                             discard=True,
                             comment=None,
                             comment_url=None,
                             rest={'HttpOnly': None},
                             rfc2109=False)
        cj.set_cookie(c)
    
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    opener.open(urllib2.Request('http://www.example.com')
    

    未经测试的代码。

    【讨论】:

    • 非常感谢!这对我有用。
    【解决方案2】:

    Firefox 和 Chrome 使用 SQLite 来编写它们的 cookie。

    您可以编写一个从那里获取 cookie 的适配器。我找到了如何执行此操作的示例并将 cookie 设置在 CookieJar 中,但我想您实际上可以子类化 python CookieJar 类来为您即时执行此操作并将值存储回来。

    http://www.guyrutenberg.com/2010/11/27/building-cookiejar-out-of-firefoxs-cookies-sqlite/

    【讨论】:

    • 我在问题中说我不希望程序从磁盘读取 cookie(如在 sql 数据库或其他任何东西中),而是我像字典一样手动输入 cookie javascript:document.write(document.cookie); 的输出。另外,python脚本是否可以自动将上述js命令的输出解析为字典,所以我需要做的就是输入字符串?谢谢。
    • 看看 cookielib API,你可以将 cookie 添加到请求中。 docs.python.org/library/…
    猜你喜欢
    • 2019-09-07
    • 2015-10-19
    • 2017-04-01
    • 2016-10-19
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    相关资源
    最近更新 更多