python-向cookiej添加cookie

2024-06-25 07:00:37 发布

您现在位置:Python中文网/ 问答频道 /正文

如何创建cookie并将其添加到python中的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'

Tags: 实例namein路径名称信息httpcookie
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参数和rfc2109参数,它们在上面@Michael的答案中使用,但没有记录在代码中,因此示例应该类似于

c = Cookie(None, 'asdf', None, '80', True, 'www.foo.bar', 
   True, False, '/', True, False, '1370002304', False, 'TestCookie', None, None, False)

(如果适用,还可以替换None的一些布尔常量)。

看看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

相关问题 更多 >