跳转到主要内容

MIME Sniffing标准的实现(https://mimesniff.spec.whatwg.org/)

项目描述

xtractmime

xtractmime 是一个BSD许可的 Python 3.7+ 实现的MIME Sniffing标准

PyPI安装

pip install xtractmime

基本用法

以下是一些使用 xtractmime.extract_mime 的简单示例

>>> from xtractmime import extract_mime
>>> extract_mime(b'Sample text content')
b'text/plain'
>>> extract_mime(b'', content_types=(b'text/html',))
b'text/html'

额外功能,通过 xtractmime.mimegroups 中的方法检查 MIME 类型是否属于特定的 MIME 类型组

>>> from xtractmime.mimegroups import is_html_mime_type, is_image_mime_type
>>> mime_type = b'text/html'
>>> is_html_mime_type(mime_type)
True
>>> is_image_mime_type(mime_type)
False

API参考

函数 xtractmime.extract_mime(*args, **kwargs) -> Optional[bytes]

参数

  • body: bytes
  • content_types: Optional[Tuple[bytes]] = None
  • http_origin: bool = True
  • no_sniff: bool = False
  • extra_types: Optional[Tuple[Tuple[bytes, bytes, Optional[Set[bytes]], bytes], ...]] = None
  • supported_types: Set[bytes] = None

返回与输入数据匹配的 MIME类型本质(例如 text/html),如果找不到匹配项,则返回 None

body 参数是要确定 MIME 类型的字节序列。 xtractmime 只考虑 body 的前几个字节,并且读取的字节数由 xtractmime.RESOURCE_HEADER_BUFFER_LENGTH 常量定义。

content_types 是资源元数据中给出的 MIME 类型的元组。例如,对于通过 HTTP 获取的资源,用户应传递 Content-Type 标头中提到的 MIME 类型列表。

http_origin 表示资源是否通过 HTTP 获取(默认为 True)或未通过 HTTP 获取(False)。

no_sniff 是一个标志,如果用户代理不希望对资源进行嗅探,则为 True,否则为默认的 False。如果将 X-Content-Type-Options 响应标头设置为 nosniff,则用户可能希望将此参数设置为 True。有关更多信息,请参阅 此处

extra_types 是用于检测附加 MIME 类型的模式元组。元组中的每个条目应遵循以下格式 (字节模式,模式掩码,前导字节,MIME 类型)

  • 字节模式 是用于与 body 的前几个字节(xtractmime.RESOURCE_HEADER_BUFFER_LENGTH)进行比较的字节序列。
  • 模式掩码 是指示 字节模式 字节重要性的字节序列:b"\xff" 表示匹配的字节是严格重要的,b"\xdf" 表示该字节以 ASCII 不区分大小写的方式重要,b"\x00" 表示该字节不重要。
  • 前导字节 是在内容中匹配前导字节时要忽略的字节集合。
  • MIME 类型 如果模式匹配则应返回。

示例 extra_types

extra_types = ((b'test', b'\xff\xff\xff\xff', None, b'text/test'), ...)

注意

在使用 extra_types 参数时请谨慎,因为它可能会为 xtractmime 引入一些权限提升漏洞。有关更多信息,请参阅 此处


可选的 supported_types 是用户代理支持的 MIME 类型的集合。如果未指定 supported_types,则假定所有 MIME 类型都受支持。使用此参数可以提高 xtractmime 的性能。

函数 xtractmime.is_binary_data(input_bytes: bytes) -> bool

如果提供的字节序列包含任何二进制数据字节,则返回 True,否则返回 False

MIME 类型组函数

以下函数在给定的 MIME 类型属于某个特定的 MIME 类型组 时返回 True,否则返回 False

xtractmime.mimegroups.is_archive_mime_type(mime_type: bytes) -> bool
xtractmime.mimegroups.is_audio_video_mime_type(mime_type: bytes) -> bool
xtractmime.mimegroups.is_font_mime_type(mime_type: bytes) -> bool
xtractmime.mimegroups.is_html_mime_type(mime_type: bytes) -> bool
xtractmime.mimegroups.is_image_mime_type(mime_type: bytes) -> bool
xtractmime.mimegroups.is_javascript_mime_type(mime_type: bytes) -> bool
xtractmime.mimegroups.is_json_mime_type(mime_type: bytes) -> bool
xtractmime.mimegroups.is_scriptable_mime_type(mime_type: bytes) -> bool
xtractmime.mimegroups.is_xml_mime_type(mime_type: bytes) -> bool
xtractmime.mimegroups.is_zip_mime_type(mime_type: bytes) -> bool

示例

>>> from xtractmime.mimegroups import is_html_mime_type, is_image_mime_type, is_zip_mime_type
>>> mime_type = b'text/html'
>>> is_html_mime_type(mime_type)
True
>>> is_image_mime_type(mime_type)
False
>>> is_zip_mime_type(mime_type)
False

变更日志

查看 变更日志

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分发

xtractmime-0.2.1.tar.gz (14.8 kB 查看散列)

上传时间 源代码

构建分发

xtractmime-0.2.1-py3-none-any.whl (10.4 kB 查看散列)

上传时间 Python 3

由以下支持