2012-08-05 53 views
2

我遇到了一個我無法解決的問題。我能夠成功獲取cookie並在登錄到Web應用程序後使用它們。問題是,Web應用程序設置新的cookie後,我需要點擊幾下。使用urllib2登錄後提取新的cookie

如何在登錄後提取或獲取額外的Cookie?這裏是我的代碼到目前爲止:

def _login_to_page(self,url): 
    cj = cookielib.CookieJar() 
    cookiehandler = urllib2.HTTPCookieProcessor(cj) 
    proxy_support = urllib2.ProxyHandler({"https" : self._proxy}) 
    opener = urllib2.build_opener(cookiehandler, proxy_support) 
    try: 
     login_post_data = {'op':'login','user':self._username,'passwd':self._password,'api_type':'json'} 
     response = opener.open(str(self._path_to_login_url), urllib.urlencode(login_post_data), self._request_timeout).read() 
     if response: 
     print "[+] Login successful" 
     self._login_cookies = cj 
     else: 
     "[-] Login has probably failed. Wrong Credentials?" 

def get_url_loggedin(self,url): 
    #the variable self._login_cookies are the cookies from the previous login 
    cookiehandler = urllib2.HTTPCookieProcessor(self._login_cookies) 
    proxy_support = urllib2.ProxyHandler({"http" : self._proxy}) 
    opener = urllib2.build_opener(cookiehandler, proxy_support) 
    urllib2.install_opener(opener) 
    try: 
     url_response = opener.open(url, None, self._request_timeout).read() 
    except Exception,e: 
     print "[-] Could not read page: " 
     print "[??] Error: " +repr(e) 

對不起,如果我的英語有點奇怪我不是母語的人。

+0

你的英語很不錯,所以不要擔心!一個問題:你現在的代碼有什麼問題?而一個觀察:你可能不應該捕捉所有的例外。只抓住那些可能會被提出來的東西通常會更好,然後只有當你有一些你想要做的東西時纔會更好。 – Ben 2012-08-05 19:03:15

+1

嗯,我沒有看到在你的代碼中提取cookie,而不是你以前提取的'self._login_cookies'。你如何提取這些,爲什麼你不能在另一個地方使用相同的方法? :) – favoretti 2012-08-05 19:03:40

+0

哇,這是快速的傢伙! :)以下是用於解壓縮cookie的以前代碼: – user1577741 2012-08-05 19:05:17

回答

0

在應用程序設置好所需的cookie之後,您應該執行cj.save('cookies.txt')以將當前設置的cookie保存到該文件,並使用cj.load('cookies.txt')在應用程序啓動時加載它們。 查看cookielib documentation