在数据库中存储cookielib cookie

Mri*_*lla 4 python urllib2 cookielib

我在使用Python 2.6中cookieliburllib2模块时使用该模块处理HTTP cookie 的方式类似于此片段:

import cookielib, urllib2
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")
Run Code Online (Sandbox Code Playgroud)

我想将cookie存储在数据库中.我不知道什么更好 - 序列化CookieJar对象并存储它或从中提取cookie CookieJar并存储它.我不知道哪一个更好或如何实现其中任何一个.我也应该能够重新创建CookieJar对象.

有人可以帮我解决上述问题吗?

提前致谢.

Ale*_*lli 9

cookielib.Cookie,引用其文档字符串(在其来源中),

故意是一个非常简单的课程.它只是拥有属性.

so pickle(或其他序列化方法)适用于保存和恢复每个Cookie实例.

至于CookieJar,set_cookie设置/添加一个cookie实例,__iter__(使用后者,只for在jar实例上执行循环)将一个接一个地返回它所拥有的所有cookie实例.

您可以用来查看如何在数据库上创建"cookie jar"的子类是BSDDBCookieJar(部分mechanize,但我只是专门指向jar源代码文件) - 它不会将所有cookie加载到内存中,但是而是将它们保存在一个self._dbbsddb实例中(主要是在磁盘上,dict-lookalike哈希表限制为只有字符串作为键和值)并使用pickle进行序列化.

如果你可以在操作期间将每个cookie保存在内存中,那么简单地pickle使用jar就是最简单的(当然,将blob放在数据库中并在重新启动时将其从那里取回) - s = cPickle.dumps(myJar, -1)给你一个大字节整个jar的字符串(以及它的策略,当然,不仅仅是cookie),并theJar = cPickle.loads(s)s从数据库重新加载为blob后重建它.