python - 向 cookiejar 添加 cookie
我该如何在Python中创建一个cookie,并把它添加到CookieJar实例中呢?我已经有了这个cookie的所有信息(比如名字、值、域名、路径等等),我不想通过HTTP请求来提取一个新的cookie。
我试过这样做,但看起来SimpleCookie类和CookieJar不兼容(有没有其他的Cookie类可以用?)
import Cookie
c = Cookie.SimpleCookie()
c["name"]="value"
c['name']['expires'] = 0
c['name']['path'] = "/"
c['name']['domain'] = "mydomain.com"
cj = cookielib.CookieJar()
cj.set_cookie(cookie)
Traceback (most recent call last):
cj.set_cookie(cookie)
File "/usr/lib/python2.6/cookielib.py", line 1627, in set_cookie
if cookie.domain not in c: c[cookie.domain] = {}
AttributeError: 'SimpleCookie' object has no attribute 'domain'
2 个回答
2
这里的关键点是,方法 cj.set_cookie
需要一个 cookielib.Cookie
类的对象作为参数(所以 是的,确实还有另一个 Cookie 类),而不是 Cookie.SimpleCookie
类的对象(或者模块 Cookie
中的其他任何类)。尽管名字听起来很相似,这些类实际上是不能互换使用的。
需要注意的是,cookielib.Cookie
的构造函数的参数列表可能在过去某个时候发生过变化(未来也可能会再变,因为这个类似乎不打算在 cookielib
之外使用),至少现在通过 help(cookielib.Cookie)
我得到的结果是
# Cookie(version, name, value, port, port_specified, domain,
# domain_specified, domain_initial_dot, path, path_specified,
# secure, expires, discard, comment, comment_url, rest, rfc2109=False)
请注意,额外的 expires
参数和在 @Michael 的回答中使用但没有文档说明的 rfc2109
参数,所以示例应该变成类似于
c = Cookie(None, 'asdf', None, '80', True, 'www.foo.bar',
True, False, '/', True, False, '1370002304', False, 'TestCookie', None, None, False)
(同时在适用的地方将一些布尔常量替换为 None
)。
11
看一下cookielib,你会看到:
try:
from cookielib import Cookie, CookieJar # Python 2
except ImportError:
from http.cookiejar import Cookie, CookieJar # Python 3
cj = CookieJar()
# Cookie(version, name, value, port, port_specified, domain,
# domain_specified, domain_initial_dot, path, path_specified,
# secure, discard, comment, comment_url, rest)
c = Cookie(None, 'asdf', None, '80', '80', 'www.foo.bar',
None, None, '/', None, False, False, 'TestCookie', None, None, None)
cj.set_cookie(c)
print cj
返回的是:
<cookielib.CookieJar[<Cookie asdf for www.foo.bar:80/>]>
在创建这个东西的时候,没有什么真正的合理性检查。端口号必须是字符串,而不是整数。