CookieJarLib无法将Cookies保存到文件中?
我正在参考Anthony Briggs提供的示例代码。不过,它似乎没有把 cookies 保存到我定义的 cookie 文件里。
这是我修改后的代码。我换用了 LWPCookieJar,因为它据说是完全兼容的。同时,我把登录的代码放到了一个单独的函数里,这样我可以先测试一下自己是否已经登录,如果没有登录,再调用登录的功能。
如果我用一个对象登录,获取新的 cookies,保存它们,然后创建一个新对象加载同一个文件,它却会恢复到登录之前存储的 cookies。
测试代码:
facebookObject = FacebookBrowser(cookie_filename)
#check if authenticated
success=myAuthenticationTest(facebookObject)
if not success:
facebookObject.setupUser(facebookObject.login, facebookObject.password, cookie_filename)
resp = facebookObject.opener.open(testurl) #new cookies should be set
facebookObject.cj.save(cookie_filename)
saved_cookies = facebookObject.cj
facebookObject2 = FacebookBrowser(cookie_filename)
newly_loaded_cookies = facebookObject2.cj
#saved_cookies != newly_loaded_cookies
类代码:
class FacebookBrowser(object):
def __init__(self,cookie_filename):
""" Start up... """
self.login = xxxxx
self.password = yyyyyy
self.cookie_filename = cookie_filename
self.cj = cookielib.LWPCookieJar(cookie_filename)
if os.access(cookie_filename, os.F_OK):
self.cj.load()
self.opener = urllib2.build_opener(
urllib2.HTTPRedirectHandler(),
urllib2.HTTPHandler(debuglevel=0),
urllib2.HTTPSHandler(debuglevel=0),
urllib2.HTTPCookieProcessor(self.cj)
)
self.opener.addheaders = [
('User-agent', ('Mozilla/5.0 (Windows; U; Windows NT 6.1; he; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3'))
]
def setupUser(self, login, password,cookie_filename):
# need this twice - once to set cookies, once to log in...
self.loginToFacebook()
self.loginToFacebook()
self.cj.save()
self.opener = urllib2.build_opener(
urllib2.HTTPRedirectHandler(),
urllib2.HTTPHandler(debuglevel=0),
urllib2.HTTPSHandler(debuglevel=0),
urllib2.HTTPCookieProcessor(self.cj)
)
self.cj.save()
def loginToFacebook(self):
"""
Handle login. This should populate our cookie jar.
"""
login_data = urllib.urlencode({
'email' : self.login,
'pass' : self.password,
})
response = self.opener.open("https://login.facebook.com/login.php", login_data)
return ''.join(response.readlines())