1. 程式人生 > >python:cookie概念和應用

python:cookie概念和應用

1.什麼是Cookie cookie (儲存在使用者本地終端上的資料)。Cookie 在計算機中是個儲存在瀏覽器目錄中的文字檔案,當瀏覽器執行時,儲存在 RAM 中發揮作用 (此種 Cookies 稱作 Session Cookies),一旦使用者從該網站或伺服器退出,Cookie 可儲存在使用者本地的硬碟上 (此種 Cookies 稱作 Persistent Cookies)。通常情況下,當用戶結束瀏覽器會話時,系統將終止所有的 Cookie。當 Web 伺服器建立了Cookies 後,只要在其有效期內,當用戶訪問同一個 Web 伺服器時,瀏覽器首先要檢查本地的Cookies,並將其原樣傳送給 Web 伺服器。這種狀態資訊稱作“Persistent Client State HTTP Cookie” ,簡稱為 Cookies。 一個瀏覽器能建立的 Cookie 數量最多為 300 個,並且每個不能超過 4KB,每個 Web 站點能設定的 Cookie 總數不能超過 20 個。 2.opener和cookielib 2.1 opener urlopen是一個特殊的opener,可以理解成opener的一個特殊例項,傳入的引數僅僅是url,data,timeout。 如果需要用到Cookie,只用這個opener是不能達到目的的,所以需要建立更一般的opener來實現對Cookie的設定。 2.2 cookielib cookielib模組的主要作用是提供可儲存cookie的物件,以便於與urllib2模組配合使用來訪問Internet資源。Cookielib模組非常強大,可以利用本模組的CookieJar類的物件來捕獲 cookie並在後續連線請求時重新發送,比如可以實現模擬登入功能。該模組主要的物件有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。 它們的關係:CookieJar —-派生—->FileCookieJar —-派生—–>MozillaCookieJar和LWPCookieJar 3 Cookie應用 3.1獲取Cookie儲存到變數 import urllib2 import cookielib #宣告一個CookieJar物件例項來儲存cookie cookie = cookielib.CookieJar() #利用urllib2庫的HTTPCookieProcessor物件來建立cookie處理器 handler = urllib2.HTTPCookieProcessor(cookie) #通過handler來構建opener opener = urllib2.build_opener(handler) #此處的open方法同urllib2的urlopen方法,也可以傳入request response = opener.open(‘

http://www.baidu.com’) for item in cookie: print 'Name = '+item.name print 'Value = '+item.value 3.2儲存Cookie到檔案 import cookielib import urllib2 #設定儲存cookie的檔案,同級目錄下的cookie.txt filename = ‘cookie.txt’ #宣告一個MozillaCookieJar物件例項來儲存cookie,之後寫入檔案 cookie = cookielib.MozillaCookieJar(filename) #利用urllib2庫的HTTPCookieProcessor物件來建立cookie處理器 handler = urllib2.HTTPCookieProcessor(cookie) #通過handler來構建opener opener = urllib2.build_opener(handler) #建立一個請求,原理同urllib2的urlopen response = opener.open(“
http://www.baidu.com
”) #儲存cookie到檔案 cookie.save(ignore_discard=True, ignore_expires=True) #注:ignore_discard: save even cookies set to be discarded. #注:ignore_expires: save even cookies that have expiredThe file is overwritten if it already exists 3.3從檔案中獲取Cookie並訪問 import cookielib import urllib2 #建立MozillaCookieJar例項物件 cookie = cookielib.MozillaCookieJar() #從檔案中讀取cookie內容到變數 cookie.load(‘cookie.txt’, ignore_discard=True, ignore_expires=True) #建立請求的request req = urllib2.Request(“
http://www.baidu.com
”) #利用urllib2的build_opener方法建立一個opener opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) response = opener.open(req) print response.read() 設想,如果cookie.txt 檔案中儲存的是某個人登入百度的cookie,那麼提取出這個cookie檔案內容,就可以用以上方法模擬這個人的賬號登入百度。 3.4利用cookie模擬網站登入 import urllib import urllib2 import cookielib filename = ‘cookie.txt’ #宣告一個MozillaCookieJar物件例項來儲存cookie,之後寫入檔案 cookie = cookielib.MozillaCookieJar(filename) opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) postdata = urllib.urlencode({ ‘stuid’:‘201200131012’, ‘pwd’:‘23342321’ }) #登入教務系統的 URL loginUrl = ‘http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bks_login2.login’ #模擬登入,並把cookie儲存到變數 result = opener.open(loginUrl,postdata) #儲存cookie到cookie.txt中 cookie.save(ignore_discard=True, ignore_expires=True) #利用cookie請求訪問另一個網址,此網址是成績查詢網址 gradeUrl = ‘http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bkscjcx.curscopre’ #請求訪問成績查詢網址 result = opener.open(gradeUrl) print result.read()

#urllib.request.install_opener(opener) #安裝opener作為urlopen()使用的全域性URL opener,即以後呼叫urlopen()時都會使用安裝的opener物件。