跳转到主要内容

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

项目描述

Python中的HTTP结构化字段

Test Status

这是一个实现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时需要给出提示。有两种方法可以实现

  1. 使用tltype参数,其值应该是'字典'、'列表'或'项'之一。
  2. 使用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 (17.7 kB 查看哈希值)

上传时间

构建分布

http_sf-1.0.2-py3-none-any.whl (22.1 kB 查看哈希值)

上传时间 Python 3

由以下组织支持

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