跳转到主要内容

解析和序列化HTTP结构化字段值

项目描述

Python中的HTTP结构化字段值

Actions Status

此包已废弃

有关替代方案,请参阅http-sf包。此包将仅针对安全问题进行更新,并且可能在未来被撤回。

简介

这是一个实现解析和序列化HTTP结构化字段Python 3库。

库的初始目的是验证规范中的算法;因此,它没有进行任何优化。它紧密跟踪规范,但由于它还不是RFC,因此可能会随时更改。

目前,此库实现了draft-ietf-httpbis-sfbis-03

Python API

对于结构化字段值,有三个顶级类型:DictionaryListItem。实例化后,每个类型都可以通过调用.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 (16.0 kB 查看哈希值)

上传时间

构建分布

http_sfv-0.9.9-py3-none-any.whl (16.8 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面