http.cookies
——HTTP状态管理¶
源代码: Lib/http/cookies.py
这个 http.cookies
模块定义用于抽象cookie概念的类,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
解析。
- 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
Web的HTTP cookie处理 客户 . 这个
http.cookiejar
和http.cookies
模块之间不相互依赖。- RFC 2109 -HTTP状态管理机制
这是此模块实现的状态管理规范。
饼干对象¶
- BaseCookie.value_decode(val)¶
返回元组
(real_value, coded_value)
从字符串表示。real_value
可以是任何类型。此方法不解码BaseCookie
---它存在,因此可以被覆盖。
- BaseCookie.value_encode(val)¶
返回元组
(real_value, coded_value)
. val 可以是任何类型,但是coded_value
将始终转换为字符串。此方法不在BaseCookie
---它存在,因此可以被覆盖。一般来说,应该是这样的
value_encode()
和value_decode()
是范围的倒数 value_decode .
- BaseCookie.output(attrs=None, header='Set-Cookie:', sep='\r\n')¶
返回适合作为HTTP头发送的字符串表示形式。 阿特斯 和 header*发送到每个 :class:`Morsel` 的 :meth:`output` 方法。 *sep 用于将标题连接在一起,默认情况下是
'\r\n'
(CRLF)。
微小物体¶
- class http.cookies.Morsel¶
抽象一个键/值对,它具有 RFC 2109 属性。
莫尔斯电码是类似字典的物体,它们的键集是常数---有效的 RFC 2109 属性,即
expires
path
comment
domain
max-age
secure
version
httponly
samesite
属性
httponly
指定cookie仅在HTTP请求中传输,并且不能通过javascript访问。这是为了减轻一些形式的跨站点脚本编写。属性
samesite
指定不允许浏览器与跨站点请求一起发送cookie。这有助于缓解CSRF攻击。此属性的有效值为“strict”和“lax”。这些键不区分大小写,其默认值为
''
.在 3.7 版更改: 属性
key
,value
和coded_value
是只读的。使用set()
设置它们。在 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:')¶
返回莫尔斯电码的字符串表示形式,适合作为HTTP头发送。默认情况下,所有属性都包括在内,除非 阿特斯 在这种情况下,它应该是要使用的属性列表。 *header*默认情况下
"Set-Cookie:"
.
- Morsel.js_output(attrs=None)¶
返回一个可嵌入的javascript片段,如果在支持javascript的浏览器上运行,它的作用将与发送HTTP头的作用相同。
意义 阿特斯 与中的相同
output()
.
- Morsel.update(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
模块。
>>> 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