1

可能重复:
python:urllib2 如何使用 urlopen 请求发送 cookie

如果我的浏览器中有 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

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

4

2 回答 2

3

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')

未经测试的代码。

于 2012-06-01T23:44:04.307 回答
1

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

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

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

于 2012-06-01T23:28:42.470 回答