http.cookiesHTTP状态管理

源代码: 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名称字符.

注意

遇到无效的cookieCookieError提出,所以如果你的新手数据来自浏览器,你应该总是准备无效数据并抓住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处理clientshttp.cookiejarhttp.cookies模块不相互依赖.
RFC 2109 – HTTP状态管理机制
这是本模块实现的状态管理规范.

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__()现在需要keyvalue考虑到了

更改版本3.7:属性key, valuecoded_value是只读的。使用set() forsetting他们.

Morsel.value

饼干的价值.

Morsel.coded_value

饼干的编码值 – 这是应该发送的.

Morsel.key

这个名字饼干.

Morsel.set (key, value, coded_value)

设置key, valuecoded_valueattributes.

Morsel.isReservedKeyK

是否KMorsel.

Morsel.outputattrs=None, header=”Set-Cookie:”

返回Morsel的字符串表示形式,适合作为HTTPheader发送。默认情况下,包括所有属性,除非attrs给出,在这种情况下,它应该是要使用的属性列表。header默认是"Set-Cookie:".

Morsel.js_outputattrs=None

返回一个可嵌入的JavaScript代码段,如果在支持JavaScript的浏览器上运行,则会像发送HTTP标头一样运行.

的含义attrs与中的相同output().

Morsel.OutputStringattrs=None

返回一个表示Morsel的字符串,没有任何周围的HTTP或Java脚本

的含义attrs与中的相同output().

Morsel.updatevalues

使用字典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=\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

评论被关闭。