在Python2.6中使用urllib2模块时,我使用cookielib模块来处理HTTP,方法与下面的代码片段类似:
import cookielib, urllib2
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")我想把曲奇存储在数据库里。我不知道哪个更好-序列化CookieJar对象并存储它,还是从CookieJar中提取cookie并存储它。我不知道哪一个更好,也不知道如何实现它们。我还应该能够重新创建CookieJar对象。
有没有人能帮我解决上面的问题?
提前谢谢。
发布于 2010-06-12 22:45:06
cookielib.Cookie,引用它的文档字符串(在其sources中),
故意是一个非常简单的类。它只包含属性。
因此,对于保存和恢复每个Cookie实例,pickle (或其他序列化方法)是很好的。
对于CookieJar,set_cookie设置/添加一个cookie实例,__iter__ (要使用后者,只需在jar实例上执行一个for循环)一个接一个地返回它持有的所有cookie实例。
可以用来查看如何创建“数据库上的cookie jar”的一个子类是BSDDBCookieJar ( mechanize的一部分,但我只是特别指出了jar源代码文件) --它不会将所有cookie加载到内存中,而是将它们保存在一个self._db中,该实例是一个bsddb实例(主要在磁盘上,类似于字典的哈希表,被约束为只将字符串作为键和值使用),并使用pickle进行序列化。
如果您不介意在操作期间将每个cookie保留在内存中,那么简单地对jar执行pickle操作是最简单的(当然,还可以将blob放入DB中,并在重新启动时从那里取回它) -- s = cPickle.dumps(myJar, -1)为整个jar (当然,还有它的策略,不仅仅是cookie)提供了一个很大的字节字符串,一旦您将s作为blob从DB重新加载,theJar = cPickle.loads(s)就会重新构建它。
发布于 2011-02-12 21:08:12
这是我实现的一个非常简单的类,它可以根据Alex提出的使用pickle的建议,从字符串加载cookie,或者将cookie转储到字符串。
from cookielib import CookieJar
try:
import cPickle as pickle
except ImportError:
import pickle
class StringCookieJar(CookieJar):
def __init__(self, string=None, policy=None):
CookieJar.__init__(self, policy)
if string:
self._cookies = pickle.loads(string)
def dump(self):
return pickle.dumps(self._cookies)https://stackoverflow.com/questions/3028923
复制相似问题