– HTTP状态管理 – Internet协议和支持(Python教程)(参考资料)
http.cookies
– HTTP状态管理
源代码: Lib / http / cookies.py
http.cookies
模块定义用于抽象概念的类,一种HTTP状态管理机制。它支持简单的string-onlycookies,并为任何可序列化的数据类型ascookie值提供抽象.
该模块以前严格应用了 RFC 2109 和 RFC 2068 规格。后来发现,MSIE 3.0x不遵循这些规范中概述的字符规则,并且当前很多浏览器和服务器在处理Cookie时都有宽松的解析规则。结果,使用的解析规则不那么严格了
字符集string.ascii_letters
, string.digits
和!#$%&"*+-.^_`|~:
表示此模块允许的Cookie名称中的有效字符集(如key
).
在版本3.3中更改:允许’:’作为有效的Cookie名称字符.
注意
遇到无效的cookie,CookieError
提出,所以如果你的新手数据来自浏览器,你应该总是准备无效数据并抓住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()
成为身份和str()
分别
//参见
- 模块
http.cookiejar
- 用于网络的HTTP cookie处理clients。
http.cookiejar
和http.cookies
模块不相互依赖. - RFC 2109 – HTTP状态管理机制
- 这是本模块实现的状态管理规范.
Cookie Objects
BaseCookie.
value_decode
(val)-
从字符串表示中返回解码值。返回值可以是任何类型。这个方法在
BaseCookie
中什么都不做 – 它存在,所以它可以被覆盖.
BaseCookie.
value_encode
(val)-
返回编码值。val可以是任何类型,但返回值必须是astring。这个方法在
BaseCookie
中没有任何作用 – 它存在,所以它可以被覆盖.一般来说,应该是
value_encode()
和value_decode()
是value_decode.
BaseCookie.
output
(attrs=None, header=”Set-Cookie:”, sep=”rn”)-
范围内的反转返回一个适合作为HTTP头发送的字符串表示。attrs和header被送到每个
Morsel
的output()
方法。sep用于将标题连接在一起,默认为组合"rn"
(CRLF).
BaseCookie.
js_output
(attrs=None)-
返回一个可嵌入的JavaScript代码段,如果在支持JavaScript的浏览器上运行,则会像发送HTTP标头一样运行.
的含义attrs与中的相同
output()
.
BaseCookie.
load
(rawdata)-
如果rawdata是一个字符串,将其解析为
HTTP_COOKIE
并将其中的值添加为Morsel
s。如果是字典,则相当于:for k, v in rawdata.items(): cookie[k] = v
Morsel Objects
- class
http.cookies.
Morsel
-
摘要一个键/值对,它有一些 RFC 2109 attributes.
Morsels是类字典对象,其键集是常量 – 有效 RFC 2109 属性,
expires
path
comment
domain
max-age
secure
version
httponly
属性
httponly
指定cookie仅在HTTP请求中传输,并且无法通过JavaScript访问。这是为了减轻某些形式的跨站点脚本.键不区分大小写,默认值为
""
.在版本3.5中更改:
__eq__()
现在需要key
和value
考虑到了更改版本3.7:属性
key
,value
和coded_value
是只读的。使用set()
forsetting他们.
Morsel.
value
-
饼干的价值.
Morsel.
coded_value
-
饼干的编码值 – 这是应该发送的.
Morsel.
key
-
这个名字饼干.
Morsel.
set
(key, value, coded_value)-
设置key, value和coded_valueattributes.
Morsel.
isReservedKey
(K)-
是否K是
Morsel
.
Morsel.
output
(attrs=None, header=”Set-Cookie:”)-
返回Morsel的字符串表示形式,适合作为HTTPheader发送。默认情况下,包括所有属性,除非attrs给出,在这种情况下,它应该是要使用的属性列表。header默认是
"Set-Cookie:"
.
Morsel.
js_output
(attrs=None)-
返回一个可嵌入的JavaScript代码段,如果在支持JavaScript的浏览器上运行,则会像发送HTTP标头一样运行.
的含义attrs与中的相同
output()
.
Morsel.
OutputString
(attrs=None)-
返回一个表示Morsel的字符串,没有任何周围的HTTP或Java脚本
的含义attrs与中的相同
output()
.
Morsel.
update
(values)-
使用字典values中的值更新Morsel字典中的值。如果values dict中的任何一个键没有效果,则引发错误 RFC 2109 属性
更改版本3.5:无效键错误.
Morsel.
copy
(value)-
返回Morsel对象的浅层副本.
更改版本3.5:返回一个Morsel对象而不是一个dict.
Morsel.
setdefault
(key, value=None)-
如果密钥不是有效则报错 RFC 2109 属性,否则与
dict.setdefault()
.
相同//示例
以下示例演示如何使用http.cookies
module.
>>> 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=12;">>> 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
文章导航
- Cookie对象
- Morsel Objects
- 示例