溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中Cookie模塊的使用方法

發(fā)布時間:2020-07-18 14:30:12 來源:億速云 閱讀:165 作者:小豬 欄目:開發(fā)技術(shù)

這篇文章主要講解了Python中Cookie模塊的使用方法,內(nèi)容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

Cookie 模塊,顧名思義,就是用來操作Cookie的模塊。

Cookie這塊小蛋糕,玩過Web的人都知道,它是Server與Client保持會話時用到的信息 切片。 Http協(xié)議本身是無狀態(tài)的,也就是說,同一個客戶端發(fā)送的兩次請求,對于Web服務器來說,沒有直接的關(guān)系。既然這樣,有人會問,既然Http是無狀態(tài) 的, 為什么有些網(wǎng)頁,只有輸入了用戶名與密碼通過驗證之后才可以訪問?

那是因為:對于通過身份驗證的用戶,Server會偷偷的在發(fā)往Client的數(shù)據(jù)中添 加 Cookie,Cookie中一般保存一個標識該Client的唯一的ID,Client在接下來對服務器的請求中,會將該ID以Cookie的形式一并 發(fā)往Server,Server從回傳回來的Cookie中提取ID并與相應的用戶綁定起來,從而實現(xiàn)身份驗證。說白了,Cookie就是一個在服務器與客戶端之間相互傳遞的字符串(下圖通過FireFox的FireBug插件查看訪問google.com時的Cookie)。

Cooke模塊中定義了4個直接操作Cookie的類:BaseCookie、SimpleCookie、SerialCookie、 SmartCookie。其中,BaseCookie是基類,定義了操作Cookie的公共部分,其他3個類都繼承自BaseCookie,它們之間的區(qū) 別僅僅在于序列化數(shù)據(jù)的方式不同。下面簡單講解這些類的使用。

BaseCookie基類: BaseCookies的行為非常像dict,可以用鍵/值對的形式來操作它,但是kye必須是字符串,value是Morsel對象 (下面會講到Morsel)。BaseCookies定義了編碼/解碼,輸入/輸出操作的公共規(guī)范:

  • BaseCookie.value_encode(val):對數(shù)據(jù)進行序列化/反序列化。這些方法都返回字符串,以便通過Http傳輸。
  • BaseCookie.output():返回字符串,該字符串可以作為Http響應頭發(fā)往客戶端。
  • BaseCookie.js_output():返回嵌入js腳本的字符串,瀏覽器通過執(zhí)行該腳本,就可以得到cooke數(shù)據(jù)。
  • BaseCookie.load(newdata):解析字符串為Cookie數(shù)據(jù)。

SimpleCookie、SerialCookie、SmartCookie都繼承自BaseCookie,具有一致的行為,它們各自對 BaseCookie的value_decode, value_encode進行了重寫并實現(xiàn)自己的序列化/反序列化策略,其中:

SimpleCookie內(nèi)部使用str()來對數(shù)據(jù)進行序列化;

SerialCookie則通過pickle模塊來序列化反序列化數(shù)據(jù);

SmartCookie相對聰明點,對于非字符串數(shù)據(jù),使用pickle序列/反序列化,否則將字符串原樣返回。

下面的例子簡單的說明如何使用Cookie模塊:

import Cookie
c = Cookie.SimpleCookie()
c['name'] = 'DarkBull'
c['address'] = 'ChinaHangZhou'
c['address']['path'] = '/'
# 路徑
c['address']['domain'] = 'appspot.com'
# domain
c['address']['expires'] = 'Fir, 01-Oct-2010 20:00:00 GMT' 
# 過期時間
print c.output()
print c.js_output()
# 輸出結(jié)果,與上圖對照
# Set-Cookie: address=ChinaHangZhou; Domain=appspot.com; expires=Fir, 01-Oct-2010 20:00:00 GMT; Path=/
# Set-Cookie: name=DarkBull
# 作為腳本輸出
# <script type="text/javascript">
# document.cookie = "address=ChinaHangZhou; Domain=appspot.com; expires=Fir, 01-Oct-2010 20:00:00 GMT; Path=/";
# </script>
# <script type="text/javascript">
# document.cookie = "name=DarkBull";
# </script>

Morsel類 : 用于表示Cookie中每一項數(shù)據(jù)的屬性而抽象的類。這些屬性包括:expires, path, comment, domain, max-age, secure, version等等(看上圖下劃線標注部分)。如果你玩過web,對這些應該不會陌生,可以在RCF2109中找到他們的具體定義

Morsel.key,Morsel.value:Cookie數(shù)據(jù)項的key/value(value可以是二進制數(shù)據(jù));

Morsel.coded_value:數(shù)據(jù)編碼后得到的字符串。Http協(xié)議是基于文本的協(xié)議,Server無法直接向Client發(fā)送二進制數(shù)據(jù),只有序列化成字符串后,才能發(fā)往Client;

Morsel.set(key, value, coded_value):設置Cookie數(shù)據(jù)項的key、value、coded_value;

Morsel.isReversvedKey(key):如果key是expires, path, comment, domain, max-age, secure, version, httponly中的一個,返回True,否則返回False;

Morsel.output():返回型如“Set-Cookie: …”的字符串,表示一個Cookie數(shù)據(jù)項;

Morsel.js_output():返回Cookie數(shù)據(jù)項的腳本字符串;

Morsel.OutputString(): 返回Morsel的字符串表示;

Morsel使用示例:

import Cookie
m = Cookie.Morsel()
m.set('name', 'DarkBull', 'DarkBull')
m['expires'] = 'Fir, 01-Oct-2010 20:00:00 GMT'
m['domain'] = 'appspot.com'
print m.output()
# 結(jié)果
# Set-Cookie: name=DarkBull; Domain=appspot.com; expires=Fir, 01-Oct-2010 20:00:00

知識點擴展:

為什么要使用Cookie呢?

Cookie,指某些網(wǎng)站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)

比如說有些網(wǎng)站需要登錄后才能訪問某個頁面,在登錄之前,你想抓取某個頁面內(nèi)容是不允許的。那么我們可以利用Urllib2庫保存我們登錄的Cookie,然后再抓取其他頁面就達到目的了。

看完上述內(nèi)容,是不是對Python中Cookie模塊的使用方法有進一步的了解,如果還想學習更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI