http.cookies --- HTTP状�管�¶
æº�代ç �: Lib/http/cookies.py
http.cookies 模å�—定义的类将 cookie 的概念抽象了出æ�¥ï¼Œè¿™æ˜¯ä¸€ç§� HTTP 状æ€�的管ç�†æœºåˆ¶ã€‚它既支æŒ�简å�•的纯å—符串形å¼�çš„ cookie,也为任何å�¯åº�列化数æ�®ç±»åž‹çš„ cookie æ��供抽象。
之å‰�该模å�—ä¸¥æ ¼åº”ç”¨äº† RFC 2109 å’Œ RFC 2068 è§„èŒƒä¸æ��述的解æž�规则。 å�Žæ�¥äººä»¬å�‘现 MSIE 3.0x 并未é�µå¾ªè¿™äº›è§„èŒƒä¸æ��è¿°çš„å—符规则;目å‰�å�„ç§�æµ�览器和æœ�务器在处ç�† cookie 时也放宽了解æž�规则。 å› æ¤ï¼Œè¯¥æ¨¡å�—ç›®å‰�使用的解æž�规则也没有以å‰�é‚£ä¹ˆä¸¥æ ¼äº†ã€‚
å—符集 string.ascii_letters, string.digits å’Œ !#$%&'*+-.^_`|~: æ ‡æ˜Žäº†æœ¬æ¨¡å�—å…�许在 cookie å��ç§°ä¸å‡ºçŽ°çš„æœ‰æ•ˆå—符 (如 key)。
在 3.3 版本å�‘生å�˜æ›´: å…�许 ':' 作为有效的 cookie å��ç§°å—符。
备注
当é�‡åˆ°æ— 效 cookie 时会触å�‘ CookieError,所以若 cookie æ•°æ�®æ�¥è‡ªæµ�览器,一定è¦�å�šå¥½åº”å¯¹æ— æ•ˆæ•°æ�®çš„准备,并在解æž�æ—¶æ�•获 CookieError。
- exception http.cookies.CookieError¶
å‡ºçŽ°å¼‚å¸¸çš„åŽŸå› ï¼Œå�¯èƒ½æ˜¯ä¸�符å�ˆ RFC 2109 :属性ä¸�æ£ç¡®ã€�Set-Cookie 头部信æ�¯ä¸�æ£ç¡®ç‰ç‰ã€‚
- class http.cookies.BaseCookie([input])¶
类似å—典的对象,å—典键为å—符串,å—典值是
Morsel实例。请注æ„�,在将键值关è�”时,首先会把值转æ�¢ä¸ºåŒ…å�«é”®å’Œå€¼çš„Morsel对象。若给出 input ï¼Œå°†ä¼šä¼ ç»™
load()方法。
- class http.cookies.SimpleCookie([input])¶
该类派生自
BaseCookieå¹¶é‡�写了value_decode()å’Œvalue_encode()。SimpleCookie支æŒ�用å—符串作为 cookie 值。 在设置值时,SimpleCookie会调用内置str()将值转æ�¢ä¸ºå—符串。 从 HTTP 接收的值ä»�ç„¶ä¿�æŒ�为å—符串。
��
http.cookiejar模�处�网络 客户端 的 HTTP cookie。
http.cookiejar和http.cookies模�相互没有�赖关系。- RFC 2109 - HTTP状�管�机制
这是本模�实现的状�管�规范。
Cookie 对象¶
- BaseCookie.value_decode(val)¶
ç”±å—符串返回元组
(real_value, coded_value)。real_valueå�¯ä¸ºä»»æ„�类型。BaseCookieä¸çš„æ¤æ–¹æ³•æœªå®žçŽ°ä»»ä½•è§£ç �工作——å�ªä¸ºèƒ½è¢«å�ç±»é‡�写。
- BaseCookie.value_encode(val)¶
返回元组
(real_value, coded_value)。val å�¯ä¸ºä»»æ„�类型,coded_value则会转æ�¢ä¸ºå—符串。BaseCookieä¸çš„æ¤æ–¹æ³•æœªå®žçŽ°ä»»ä½•ç¼–ç �工作——å�ªä¸ºèƒ½è¢«å�ç±»é‡�写。通常在 value_decode çš„å�–值范围内,
value_encode()和value_decode()应为�互逆�作。
- BaseCookie.output(attrs=None, header='Set-Cookie:', sep='\r\n')¶
返回å�¯ä½œä¸º HTTP æ ‡å¤´ä¿¡æ�¯å�‘é€�çš„å—符串表示。 attrs å’Œ header ä¼šä¼ ç»™æ¯�个
Morselçš„output()方法。 sep 用æ�¥å°†æ ‡å¤´è¿žæŽ¥åœ¨ä¸€èµ·ï¼Œé»˜è®¤ä¸º'\r\n'(CRLF) 组å�ˆã€‚
Morsel 对象¶
- class http.cookies.Morsel¶
对键/值对的抽象,带有 RFC 2109 的部分属性。
morsel 对象类似于å—典,它的键是一组常é‡� --- å�³æœ‰æ•ˆçš„ RFC 2109 属性,包括:
httponly属性指明了该 cookie 仅在 HTTP 请求ä¸ä¼ 输,且ä¸�能通过 JavaScript 访问。这是为了å‡�è½»æŸ�些跨站脚本攻击的å�±å®³ã€‚samesite属性指明了æµ�览器ä¸�得与跨站请求一起å�‘é€�该 cookie。这有助于å‡�è½» CSRF 攻击的å�±å®³ã€‚æ¤å±žæ€§çš„æœ‰æ•ˆå€¼ä¸º “Strictâ€�和“Laxâ€�。键ä¸�区分大å°�写,默认值为
''。在 3.7 版本�生�更: Attributes
key,valueandcoded_valueare read-only. Useset()for setting them.在 3.8 版本å�‘生å�˜æ›´: å¢žåŠ å¯¹
samesite属性的支�。
- Morsel.value¶
Cookie的值。
- Morsel.coded_value¶
ç¼–ç �å�Žçš„ cookie 值——也å�³è¦�å�‘é€�的内容。
- Morsel.key¶
cookie �称
- Morsel.set(key, value, coded_value)¶
设置 key�value 和 coded_value 属性。
- Morsel.output(attrs=None, header='Set-Cookie:')¶
返回 morsel çš„å—符串形å¼�,适用于作为 HTTP 头部信æ�¯è¿›è¡Œå�‘é€�。默认包å�«æ‰€æœ‰å±žæ€§ï¼Œé™¤é�žç»™å‡º attrs 属性列表。header 默认为
"Set-Cookie:"。
- Morsel.js_output(attrs=None)¶
返回一段å�¯ä¾›åµŒå…¥çš„ JavaScript 代ç �,若在支æŒ� JavaScript çš„æµ�览器上è¿�行,其作用如å�Œå�‘é€� HTTP 头部信æ�¯ä¸€æ ·ã€‚
attrs 的�义与
output()的相�。
- Morsel.OutputString(attrs=None)¶
返回 morsel çš„å—符串形å¼�,ä¸�å�« HTTP 或 JavaScript æ•°æ�®ã€‚
attrs 的�义与
output()的相�。
- Morsel.update(values)¶
用å—å…¸ values ä¸çš„值更新 morsel å—å…¸ä¸çš„值。若有 values å—å…¸ä¸çš„é”®ä¸�是有效的 RFC 2109 属性,则会触å�‘错误。
在 3.5 版本å�‘生å�˜æ›´: æ— æ•ˆé”®ä¼šè§¦å�‘错误。
- Morsel.copy(value)¶
返回 morsel 对象的浅表�制副本。
在 3.5 版本å�‘生å�˜æ›´: 返回一个 morsel 对象,而é�žå—典。
- Morsel.setdefault(key, value=None)¶
若 key �是有效的 RFC 2109 属性则触�错误,�则与
dict.setdefault()相�。
示例¶
以下例å�演示了 http.cookies 模å�—的用法。
>>> from http import cookies
>>> C = cookies.SimpleCookie()
>>> C["fig"] = "newton"
>>> C["sugar"] = "wafer"
>>> print(C) # generate HTTP headers
Set-Cookie: fig=newton
Set-Cookie: sugar=wafer
>>> print(C.output()) # same thing
Set-Cookie: fig=newton
Set-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=ahoy
Set-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=7
Set-Cookie: string=seven