新聞中心
http.cookies —- HTTP狀態(tài)管理
源代碼: Lib/http/cookies.py

創(chuàng)新互聯(lián)從2013年開始,先為昌寧等服務(wù)建站,昌寧等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為昌寧企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
http.cookies 模塊定義的類將 cookie 的概念抽象了出來,這是一種 HTTP 狀態(tài)的管理機(jī)制。它既支持簡單的純字符串形式的 cookie,也為任何可序列化數(shù)據(jù)類型的 cookie 提供抽象。
以前,該模塊嚴(yán)格套用 RFC 2109 和 RFC 2068 規(guī)范中描述的解析規(guī)則。后來人們發(fā)現(xiàn),MSIE 3.0 并不遵循這些規(guī)范中的字符規(guī)則,而且目前許多瀏覽器和服務(wù)器在處理 cookie 時(shí)也放寬了解析規(guī)則。 因此,這里用到的解析規(guī)則沒有那么嚴(yán)格。
字符集 string.ascii_letters 、 string.digits 和 !#$%&'*+-.^_`|~: 給出了本模塊允許出現(xiàn)在 cookie 名稱中的有效字符集(如 key)。
在 3.3 版更改: “:”字符可用于有效的 cookie 名稱。
備注
當(dāng)遇到無效 cookie 時(shí)會(huì)觸發(fā) CookieError,所以若 cookie 數(shù)據(jù)來自瀏覽器,一定要做好應(yīng)對無效數(shù)據(jù)的準(zhǔn)備,并在解析時(shí)捕獲 CookieError。
exception http.cookies.CookieError
出現(xiàn)異常的原因,可能是不符合 RFC 2109 :屬性不正確、Set-Cookie 頭部信息不正確等等。
class http.cookies.BaseCookie([input])
類似字典的對象,字典鍵為字符串,字典值是 Morsel 實(shí)例。請注意,在將鍵值關(guān)聯(lián)時(shí),首先會(huì)把值轉(zhuǎn)換為包含鍵和值的 Morsel 對象。
若給出 input ,將會(huì)傳給 load() 方法。
class http.cookies.SimpleCookie([input])
該類派生于 BaseCookie,并覆蓋了 value_decode() 和 value_encode() 方法。SimpleCookie 允許用字符串作為 cookie 值。在設(shè)置值時(shí),SimpleCookie 將調(diào)用內(nèi)置的 str() 將其轉(zhuǎn)換為字符串。從 HTTP 接收到的值將作為字符串保存。
參見
http.cookiejar 模塊
處理網(wǎng)絡(luò) 客戶端 的 HTTP cookie。 http.cookiejar 和 http.cookies 模塊相互沒有依賴關(guān)系。
RFC 2109 - HTTP狀態(tài)管理機(jī)制
這是本模塊實(shí)現(xiàn)的狀態(tài)管理規(guī)范。
Cookie 對象
BaseCookie.value_decode(val)
由字符串返回元組 (real_value, coded_value)。real_value 可為任意類型。BaseCookie 中的此方法未實(shí)現(xiàn)任何解碼工作——只為能被子類重寫。
BaseCookie.value_encode(val)
返回元組 (real_value, coded_value)。val 可為任意類型,coded_value 則會(huì)轉(zhuǎn)換為字符串。 BaseCookie 中的此方法未實(shí)現(xiàn)任何編碼工作——只為能被子類重寫。
通常在 value_decode 的取值范圍內(nèi),value_encode() 和 value_decode() 應(yīng)為可互逆操作。
BaseCookie.output(attrs=None, header=’Set-Cookie:’, sep=’\r\n’)
返回可作為 HTTP 標(biāo)頭信息發(fā)送的字符串表示。 attrs 和 header 會(huì)傳給每個(gè) Morsel 的 output() 方法。 sep 用來將標(biāo)頭連接在一起,默認(rèn)為 '\r\n' (CRLF) 組合。
BaseCookie.js_output(attrs=None)
返回一段可供嵌入的 JavaScript 代碼,若在支持 JavaScript 的瀏覽器上運(yùn)行,其作用如同發(fā)送 HTTP 頭部信息一樣。
attrs 的含義與 output() 的相同。
BaseCookie.load(rawdata)
若 rawdata 為字符串,則會(huì)作為 HTTP_COOKIE 進(jìn)行解析,并將找到的值添加為 Morsel。 如果是字典值,則等價(jià)于:
for k, v in rawdata.items():cookie[k] = v
Morsel 對象
class http.cookies.Morsel
對鍵/值對的抽象,帶有 RFC 2109 的部分屬性。
morsel 對象類似于字典,鍵的組成是常量——均為有效的 RFC 2109 屬性,包括:
expirespathcommentdomainmax-agesecureversionhttponlysamesite
httponly 屬性指明了該 cookie 僅在 HTTP 請求中傳輸,且不能通過 JavaScript 訪問。這是為了減輕某些跨站腳本攻擊的危害。
samesite 屬性指明了瀏覽器不得與跨站請求一起發(fā)送該 cookie。這有助于減輕 CSRF 攻擊的危害。此屬性的有效值為 “Strict”和“Lax”。
鍵不區(qū)分大小寫,默認(rèn)值為 ''。
在 3.5 版更改: 現(xiàn)在,__eq__() 會(huì)同時(shí)考慮 key 和 value 。
在 3.7 版更改: Attributes key, value and coded_value are read-only. Use set() for setting them.
在 3.8 版更改: 增加對 samesite 屬性的支持。
Morsel.value
Cookie的值。
Morsel.coded_value
編碼后的 cookie 值——也即要發(fā)送的內(nèi)容。
Morsel.key
cookie 名稱
Morsel.set(key, value, coded_value)
設(shè)置 key、value 和 coded_value 屬性。
Morsel.isReservedKey(K)
判斷 K 是否屬于 Morsel 的鍵。
Morsel.output(attrs=None, header=’Set-Cookie:’)
返回 morsel 的字符串形式,適用于作為 HTTP 頭部信息進(jìn)行發(fā)送。默認(rèn)包含所有屬性,除非給出 attrs 屬性列表。header 默認(rèn)為 "Set-Cookie:"。
Morsel.js_output(attrs=None)
返回一段可供嵌入的 JavaScript 代碼,若在支持 JavaScript 的瀏覽器上運(yùn)行,其作用如同發(fā)送 HTTP 頭部信息一樣。
attrs 的含義與 output() 的相同。
Morsel.OutputString(attrs=None)
返回 morsel 的字符串形式,不含 HTTP 或 JavaScript 數(shù)據(jù)。
attrs 的含義與 output() 的相同。
Morsel.update(values)
用字典 values 中的值更新 morsel 字典中的值。若有 values 字典中的鍵不是有效的 RFC 2109 屬性,則會(huì)觸發(fā)錯(cuò)誤。
在 3.5 版更改: 無效鍵會(huì)觸發(fā)錯(cuò)誤。
Morsel.copy(value)
返回 morsel 對象的淺表復(fù)制副本。
在 3.5 版更改: 返回一個(gè) morsel 對象,而非字典。
Morsel.setdefault(key, value=None)
若 key 不是有效的 RFC 2109 屬性則觸發(fā)錯(cuò)誤,否則與 dict.setdefault() 相同。
示例
以下例子演示了 http.cookies 模塊的用法。
>>> from http import cookies>>> C = cookies.SimpleCookie()>>> C["fig"] = "newton">>> C["sugar"] = "wafer">>> print(C) # generate HTTP headersSet-Cookie: fig=newtonSet-Cookie: sugar=wafer>>> print(C.output()) # same thingSet-Cookie: fig=newtonSet-Cookie: sugar=wafer>>> C = cookies.SimpleCookie()>>> C["rocky"] = "road">>> C["rocky"]["path"] = "/cookie">>> print(C.output(header="Cookie:"))Cookie: rocky=road; Path=/cookie>>> print(C.output(attrs=[], header="Cookie:"))Cookie: rocky=road>>> C = cookies.SimpleCookie()>>> C.load("chips=ahoy; vienna=finger") # load from a string (HTTP header)>>> print(C)Set-Cookie: chips=ahoySet-Cookie: vienna=finger>>> C = cookies.SimpleCookie()>>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";')>>> print(C)Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;">>> C = cookies.SimpleCookie()>>> C["oreo"] = "doublestuff">>> C["oreo"]["path"] = "/">>> print(C)Set-Cookie: oreo=doublestuff; Path=/>>> C = cookies.SimpleCookie()>>> C["twix"] = "none for you">>> C["twix"].value'none for you'>>> C = cookies.SimpleCookie()>>> C["number"] = 7 # equivalent to C["number"] = str(7)>>> C["string"] = "seven">>> C["number"].value'7'>>> C["string"].value'seven'>>> print(C)Set-Cookie: number=7Set-Cookie: string=seven
本文題目:創(chuàng)新互聯(lián)Python教程:http.cookies —- HTTP狀態(tài)管理
地址分享:http://fisionsoft.com.cn/article/cochisp.html


咨詢
建站咨詢
