解析和序列化HTTP结构化字段
项目描述
Python中的HTTP结构化字段
这是一个实现RFC8941中解析和序列化的Python 3库。
此库还实现了显示字符串和日期,如草案-ietf-httpbis-sfbis-05中所述。
Python API
解析
可以通过调用parse
来解析文本HTTP头,返回值是一个表示字段值的结构化数据。
>>> from http_sf import parse, ser
>>> parse(b"foo; a=1, bar; b=2", tltype="dictionary")
{'foo': (True, {'a': 1}), 'bar': (True, {'b': 2})}
parse()
将bytes-like对象作为第一个参数。如果您想解析一个字符串,请先将其.encode()
。
指示顶级类型
因为库需要知道它是哪种字段,所以在调用parse
时需要给出提示。有两种方法可以实现
- 使用
tltype
参数,其值应该是'字典'、'列表'或'项'之一。 - 使用
name
参数来指示具有注册类型的字段名称,如重置草案中所述。
注意,如果您使用name
,如果与名称关联的类型未知,则会引发KeyError
,除非您还传递了一个tltype
作为后备。
类型
在返回的数据中,字典表示为Python字典;列表表示为Python列表,而项是裸类型。
裸类型使用以下Python类型表示
- 整数:
int
- 十进制:
float
- 字符串:
str
- 标记:
http_sf.Token
(一个UserString
) - 字节序列:
bytes
- 布尔值:
bool
- 日期:
datetime.datetime
- 显示字符串:
http_sf.DisplayString
(一个UserString
)
内部列表也用列表表示。
参数
可以包含参数的结构化类型(包括字典和列表成员以及单个项和内部列表)用 (value, parameters)
的元组表示,其中参数是一个字典。
因此,一个具有一个参数的 Token 单个项,其值是一个整数,将这样表示
>>> parse(b"foo; a=1", tltype="item")
(Token("foo"), {'a': 1})
注意,即使没有参数,也会返回一个元组,就像这个列表上的某些项一样
>>> parse(b"a, b; q=5, c", tltype="list")
[(Token("a"), {}), (Token("b"), {'q': 5}), (Token("c"), {})]
序列化
要将该数据结构序列化为文本结构化字段,请使用 ser
>>> field = parse(b"a, b; q=5, c", tltype="list")
>>> ser(field)
'a, b;q=5, c'
在调用 ser
时,如果项或内部列表没有参数,可以省略它们;例如
>>> structure = [5, 6, (7, {"with": "param"})]
>>> ser(structure)
'5, 6, 7;with="param"'
请注意,ser
产生一个字符串,而不是类似字节的对象。
命令行使用
您可以通过在命令行上调用库,使用 -d
、-l
和 -i
分别表示字典、列表或项来验证和检查字段值的数据模型;例如
> python3 -m http_sf -i "foo;bar=baz"
[
{
"__type": "token",
"value": "foo"
},
{
"bar": {
"__type": "token",
"value": "baz"
}
}
]
或
> python3 -m http_sf -i "foo;&bar=baz"
FAIL: Key does not begin with lcalpha or * at: &bar=baz
或者,您可以通过使用 -n
选项传递字段名,只要它是兼容的 retrofit 字段
> python3 -m http_sf -n "Cache-Control" "max-age=40, must-revalidate"
{
"max-age": [
40,
{}
],
"must-revalidate": [
true,
{}
]
}
请注意,如果成功,输出是 测试套件 使用的 JSON 格式。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分布
构建分布
http_sf-1.0.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c1e26c594dfb4ce98bf5ac8a1284e896159f1f64e951e8513c7715b5705de887 |
|
MD5 | 4d270aea2115834175a887645f141d39 |
|
BLAKE2b-256 | 6b2ae53dfcd94e9513f00870ac359612cc84f716f1c92a04355bf2528ce41d23 |
http_sf-1.0.2-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 40fd9d1c8bf53a78860fd6a81649194a5b6af20264abbd89b9f6808d5c4feaad |
|
MD5 | 73e9fcf352c0b0f234c422c638ee0243 |
|
BLAKE2b-256 | 79eb788495610e076bd11361ae97f7c2e3b7303f3a88f41ee756a00825c950d0 |