CookieJarLib не будет сохранять куки обратно в файл? - PullRequest
3 голосов
/ 02 сентября 2010

Я работаю над примером кода, предоставленным Энтони Бриггсом. Однако похоже, что файлы cookie не сохраняются обратно в определенный файл cookie.

Мой измененный код.Я перешел на использование LWPCookieJar, потому что он предположительно полностью совместим , а также удалил код входа в отдельную функцию, чтобы я мог сначала проверить, авторизован ли я, а затем, если нет, вызвать функцию входа.

Если я войду с объектом, получу новые куки, сохраню их, а затем создаю новый объект, загружающий тот же файл, он вернется к куки, сохраненным до входа в систему.

Тестовый код:

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())

1 Ответ

2 голосов
/ 03 сентября 2010

Я только что прочитал на другом форуме , что мне нужно было установить ignore_discard=True во всех методах .save () и .load ().

...