解析和序列化HTTP结构化字段值
项目描述
Python中的HTTP结构化字段值
此包已废弃
有关替代方案,请参阅http-sf包。此包将仅针对安全问题进行更新,并且可能在未来被撤回。
简介
这是一个实现解析和序列化HTTP结构化字段的Python 3库。
库的初始目的是验证规范中的算法;因此,它没有进行任何优化。它紧密跟踪规范,但由于它还不是RFC,因此可能会随时更改。
目前,此库实现了draft-ietf-httpbis-sfbis-03。
Python API
对于结构化字段值,有三个顶级类型:Dictionary
、List
和Item
。实例化后,每个类型都可以通过调用.parse()
来解析字符串HTTP头部字段值。
>>> from http_sfv import List
>>> my_list = List()
>>> my_list.parse(b"foo; a=1, bar; b=2")
请注意,.parse()
接受一个类似bytes的对象。如果您想解析一个字符串,请先使用.encode()
对其进行编码。
列表和字典的成员可以通过Python的常规列表和字典方法访问
>>> my_list
[<http_sfv.item.Item object at 0x106d25190>, <http_sfv.item.Item object at 0x106d25210>]
>>> my_list[0]
<http_sfv.item.Item object at 0x106d25190>
项目(无论是否为顶层或位于列表或字典值内部)可以通过.value
属性访问其值
>>> my_list[0].value
'foo'
项目(和内部列表)的参数可以通过.params
属性访问,该属性是一个字典
>>> my_list[0].params['a']
1
请注意,标记和字符串都评估为Python字符串,但标记具有不同的类
>>> type(my_list[0].value)
<class 'http_sfv.token.Token'>
这意味着您需要显式创建标记
>>> from http_sfv import Token
>>> my_list.append(Token('bar'))
>>> my_list[-1]
'bar'
同样,显示字符串使用DisplayString对象表示;日期作为datetime.datetime
对象。
如果您比较两个项目,即使它们的参数不同,只要它们的值匹配,它们就会被视为等效。
>>> Token('foo') in my_list # note that my_list's 'foo' has a parameter
True
>>> my_list.count(Token("foo"))
1
可以通过传递一个列表来添加内部列表。
>>> my_list.append(['another_thing', 'and_another'])
>>> print(my_list)
foo;a=1, bar;b=2, bar, ("another_thing" "and_another")
>>> my_list[-1][-1].params['a'] = True
字典、列表和项目可以通过值来实例化。
>>> from http_sfv import Dictionary
>>> my_dictionary = Dictionary({'a': '1', 'b': 2, 'c': Token('foo')})
>>> my_dictionary
{'a': <http_sfv.item.Item object at 0x106a94c40>, 'b': <http_sfv.item.Item object at 0x106a94d00>, 'c': <http_sfv.item.Item object at 0x106a94dc0>}
一旦实例化,就可以访问参数。
>>> my_dictionary['b'].params['1'] = 2.0
最后,要序列化字段值,只需将其评估为字符串即可。
>>> print(my_dictionary)
a=1, b=2;b1=2.0, c=foo
命令行使用
您可以通过在命令行上调用库,使用 -d
、-l
和 -i
分别表示字典、列表或项目来验证和检查字段值的模型;例如:
> python3 -m http_sfv -i "foo;bar=baz"
[
{
"__type": "token",
"value": "foo"
},
{
"bar": {
"__type": "token",
"value": "baz"
}
}
]
或
> python3 -m http_sfv -i "foo;&bar=baz"
FAIL: Key does not begin with lcalpha or * at: &bar=baz
注意,如果成功,输出将是 测试套件 使用的 JSON 格式。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分布
构建分布
http_sfv-0.9.9.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e132dc9bef990832bc01824f5fa9d4efc7d0f4271e4b227db35c8ef38540c739 |
|
MD5 | 033bbd44257bda29bea06eaf4ab86d6f |
|
BLAKE2b-256 | 57ae7684925d335eb4182d95b2d179c81fc05dbc89dc93e42b239c13f800525c |
http_sfv-0.9.9-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5feed51c90e9a1dc797701662d044d936923cf0027255c75452b8240e33d6c82 |
|
MD5 | 99196ff4b46f2935b6c121de735934a4 |
|
BLAKE2b-256 | 15f7f5adcd777e7e641c7824f4e45875a14cc7e0c6cd30b0f9db0c3698fd8e16 |