python - 将cookie添加到cookiejar
问题描述:
如何创建cookie并将其添加到python中的CookieJar实例? 我有cookie的所有信息(名称,值,域,路径等),我不想提取一个新的cookie与http请求。python - 将cookie添加到cookiejar
我试过,但它看起来像SimpleCookie类是不CookieJar兼容(?有另一种饼干类)
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'
答
看着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/>]>
对实例化参数没有真正的理性检查。端口必须是字符串,而不是int。
答
这里的关键点是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
参数和使用,但不是参数rfc2109
在@迈克尔的回答上面的代码记录,因此例如应该成为像
c = Cookie(None, 'asdf', None, '80', True, 'www.foo.bar',
True, False, '/', True, False, '1370002304', False, 'TestCookie', None, None, False)
(也适用于替换None
的某些布尔常量)。
你使用的是什么环境?这些东西已经在python web服务和请求框架中重新实现了很多。 – 2012-10-01 21:37:29