httptools 0.9.0


pip install httptools

  Latest version

Released: Oct 09, 2026

Project Links

Meta
Author: Yury Selivanov
Requires Python: >=3.9

Classifiers

Intended Audience
  • Developers

Programming Language
  • Python :: 3

Operating System
  • POSIX
  • MacOS :: MacOS X

Environment
  • Web Environment

Development Status
  • 5 - Production/Stable

Tests

httptools is a Python binding for the nodejs HTTP parser.

The package is available on PyPI: pip install httptools.

APIs

httptools contains two classes httptools.HttpRequestParser, httptools.HttpResponseParser (fulfilled through llhttp) and a function for parsing URLs httptools.parse_url (through http-parse for now). See unittests for examples.

class HttpRequestParser:

    def __init__(self, protocol):
        """HttpRequestParser

        protocol -- a Python object with the following methods
        (all optional):

          - on_message_begin()
          - on_url(url: bytes)
          - on_header(name: bytes, value: bytes)
          - on_headers_complete()
          - on_body(body: bytes)
          - on_message_complete()
          - on_chunk_header()
          - on_chunk_complete()
          - on_status(status: bytes)
        """

    def get_http_version(self) -> str:
        """Return an HTTP protocol version."""

    def should_keep_alive(self) -> bool:
        """Return ``True`` if keep-alive mode is preferred."""

    def should_upgrade(self) -> bool:
        """Return ``True`` if the parsed request is a valid Upgrade request.
	The method exposes a flag set just before on_headers_complete.
	Calling this method earlier will only yield `False`.
	"""

    def feed_data(self, data: bytes):
        """Feed data to the parser.

        Will eventually trigger callbacks on the ``protocol``
        object.

        On HTTP upgrade, this method will raise an
        ``HttpParserUpgrade`` exception, with its sole argument
        set to the offset of the non-HTTP data in ``data``.
        """

    def get_method(self) -> bytes:
        """Return HTTP request method (GET, HEAD, etc)"""


class HttpResponseParser:

    """Has all methods except ``get_method()`` that
    HttpRequestParser has."""

    def get_status_code(self) -> int:
        """Return the status code of the HTTP response"""


def parse_url(url: bytes):
    """Parse URL strings into a structured Python object.

    Returns an instance of ``httptools.URL`` class with the
    following attributes:

      - schema: bytes
      - host: bytes
      - port: int
      - path: bytes
      - query: bytes
      - fragment: bytes
      - userinfo: bytes
    """

Development

  1. Clone this repository with git clone --recursive git@github.com:MagicStack/httptools.git

  2. Create a virtual environment with Python 3: python3 -m venv envname

  3. Activate the environment with source envname/bin/activate

  4. Run make and make test.

License

MIT.

Wheel compatibility matrix

Platform CPython 3.9 CPython 3.10 CPython 3.11 CPython 3.12 CPython 3.13 CPython 3.14 CPython 3.15 CPython (additional flags: t) 3.14 CPython (additional flags: t) 3.15
macosx_11_0_arm64
macosx_11_0_x86_64
manylinux1_x86_64
manylinux2014_aarch64
manylinux2014_ppc64le
manylinux_2_17_aarch64
manylinux_2_17_ppc64le
manylinux_2_28_aarch64
manylinux_2_28_ppc64le
manylinux_2_28_x86_64
manylinux_2_31_riscv64
manylinux_2_39_riscv64
manylinux_2_5_x86_64
musllinux_1_2_aarch64
musllinux_1_2_ppc64le
musllinux_1_2_riscv64
musllinux_1_2_x86_64
win32
win_amd64
win_arm64

Files in release

httptools-0.9.0-cp310-cp310-macosx_11_0_arm64.whl (117.0KiB)
httptools-0.9.0-cp310-cp310-macosx_11_0_x86_64.whl (112.7KiB)
httptools-0.9.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (475.6KiB)
httptools-0.9.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (475.5KiB)
httptools-0.9.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (500.6KiB)
httptools-0.9.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (438.7KiB)
httptools-0.9.0-cp310-cp310-musllinux_1_2_aarch64.whl (459.9KiB)
httptools-0.9.0-cp310-cp310-musllinux_1_2_ppc64le.whl (484.2KiB)
httptools-0.9.0-cp310-cp310-musllinux_1_2_riscv64.whl (433.8KiB)
httptools-0.9.0-cp310-cp310-musllinux_1_2_x86_64.whl (462.4KiB)
httptools-0.9.0-cp310-cp310-win32.whl (84.3KiB)
httptools-0.9.0-cp310-cp310-win_amd64.whl (90.5KiB)
httptools-0.9.0-cp310-cp310-win_arm64.whl (87.4KiB)
httptools-0.9.0-cp311-cp311-macosx_11_0_arm64.whl (116.3KiB)
httptools-0.9.0-cp311-cp311-macosx_11_0_x86_64.whl (111.8KiB)
httptools-0.9.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (487.4KiB)
httptools-0.9.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (486.5KiB)
httptools-0.9.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (512.2KiB)
httptools-0.9.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (444.7KiB)
httptools-0.9.0-cp311-cp311-musllinux_1_2_aarch64.whl (472.1KiB)
httptools-0.9.0-cp311-cp311-musllinux_1_2_ppc64le.whl (494.9KiB)
httptools-0.9.0-cp311-cp311-musllinux_1_2_riscv64.whl (439.7KiB)
httptools-0.9.0-cp311-cp311-musllinux_1_2_x86_64.whl (474.2KiB)
httptools-0.9.0-cp311-cp311-win32.whl (83.8KiB)
httptools-0.9.0-cp311-cp311-win_amd64.whl (90.3KiB)
httptools-0.9.0-cp311-cp311-win_arm64.whl (87.0KiB)
httptools-0.9.0-cp312-cp312-macosx_11_0_arm64.whl (116.2KiB)
httptools-0.9.0-cp312-cp312-macosx_11_0_x86_64.whl (112.4KiB)
httptools-0.9.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (539.9KiB)
httptools-0.9.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (536.3KiB)
httptools-0.9.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (555.8KiB)
httptools-0.9.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (476.2KiB)
httptools-0.9.0-cp312-cp312-musllinux_1_2_aarch64.whl (517.2KiB)
httptools-0.9.0-cp312-cp312-musllinux_1_2_ppc64le.whl (539.5KiB)
httptools-0.9.0-cp312-cp312-musllinux_1_2_riscv64.whl (471.1KiB)
httptools-0.9.0-cp312-cp312-musllinux_1_2_x86_64.whl (523.6KiB)
httptools-0.9.0-cp312-cp312-win32.whl (84.3KiB)
httptools-0.9.0-cp312-cp312-win_amd64.whl (90.3KiB)
httptools-0.9.0-cp312-cp312-win_arm64.whl (86.6KiB)
httptools-0.9.0-cp313-cp313-macosx_11_0_arm64.whl (114.4KiB)
httptools-0.9.0-cp313-cp313-macosx_11_0_x86_64.whl (110.6KiB)
httptools-0.9.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (507.9KiB)
httptools-0.9.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (504.0KiB)
httptools-0.9.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (522.5KiB)
httptools-0.9.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (452.0KiB)
httptools-0.9.0-cp313-cp313-musllinux_1_2_aarch64.whl (485.9KiB)
httptools-0.9.0-cp313-cp313-musllinux_1_2_ppc64le.whl (505.0KiB)
httptools-0.9.0-cp313-cp313-musllinux_1_2_riscv64.whl (448.4KiB)
httptools-0.9.0-cp313-cp313-musllinux_1_2_x86_64.whl (491.2KiB)
httptools-0.9.0-cp313-cp313-win32.whl (83.9KiB)
httptools-0.9.0-cp313-cp313-win_amd64.whl (89.4KiB)
httptools-0.9.0-cp313-cp313-win_arm64.whl (86.0KiB)
httptools-0.9.0-cp314-cp314-macosx_11_0_arm64.whl (115.4KiB)
httptools-0.9.0-cp314-cp314-macosx_11_0_x86_64.whl (111.3KiB)
httptools-0.9.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (502.3KiB)
httptools-0.9.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (502.3KiB)
httptools-0.9.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (522.5KiB)
httptools-0.9.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (450.7KiB)
httptools-0.9.0-cp314-cp314-musllinux_1_2_aarch64.whl (484.2KiB)
httptools-0.9.0-cp314-cp314-musllinux_1_2_ppc64le.whl (504.2KiB)
httptools-0.9.0-cp314-cp314-musllinux_1_2_riscv64.whl (447.4KiB)
httptools-0.9.0-cp314-cp314-musllinux_1_2_x86_64.whl (486.7KiB)
httptools-0.9.0-cp314-cp314-win32.whl (86.4KiB)
httptools-0.9.0-cp314-cp314-win_amd64.whl (92.6KiB)
httptools-0.9.0-cp314-cp314-win_arm64.whl (89.4KiB)
httptools-0.9.0-cp314-cp314t-macosx_11_0_arm64.whl (120.8KiB)
httptools-0.9.0-cp314-cp314t-macosx_11_0_x86_64.whl (115.6KiB)
httptools-0.9.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (577.4KiB)
httptools-0.9.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (589.6KiB)
httptools-0.9.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (593.1KiB)
httptools-0.9.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (517.6KiB)
httptools-0.9.0-cp314-cp314t-musllinux_1_2_aarch64.whl (561.6KiB)
httptools-0.9.0-cp314-cp314t-musllinux_1_2_ppc64le.whl (569.3KiB)
httptools-0.9.0-cp314-cp314t-musllinux_1_2_riscv64.whl (513.8KiB)
httptools-0.9.0-cp314-cp314t-musllinux_1_2_x86_64.whl (558.3KiB)
httptools-0.9.0-cp314-cp314t-win32.whl (92.4KiB)
httptools-0.9.0-cp314-cp314t-win_amd64.whl (99.5KiB)
httptools-0.9.0-cp314-cp314t-win_arm64.whl (94.9KiB)
httptools-0.9.0-cp315-cp315-macosx_11_0_arm64.whl (115.1KiB)
httptools-0.9.0-cp315-cp315-macosx_11_0_x86_64.whl (111.0KiB)
httptools-0.9.0-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (503.5KiB)
httptools-0.9.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (504.0KiB)
httptools-0.9.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (522.3KiB)
httptools-0.9.0-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (455.6KiB)
httptools-0.9.0-cp315-cp315-musllinux_1_2_aarch64.whl (485.5KiB)
httptools-0.9.0-cp315-cp315-musllinux_1_2_ppc64le.whl (504.1KiB)
httptools-0.9.0-cp315-cp315-musllinux_1_2_riscv64.whl (452.3KiB)
httptools-0.9.0-cp315-cp315-musllinux_1_2_x86_64.whl (487.4KiB)
httptools-0.9.0-cp315-cp315-win32.whl (86.3KiB)
httptools-0.9.0-cp315-cp315-win_amd64.whl (92.4KiB)
httptools-0.9.0-cp315-cp315-win_arm64.whl (89.2KiB)
httptools-0.9.0-cp315-cp315t-macosx_11_0_arm64.whl (120.2KiB)
httptools-0.9.0-cp315-cp315t-macosx_11_0_x86_64.whl (114.6KiB)
httptools-0.9.0-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (574.9KiB)
httptools-0.9.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (586.0KiB)
httptools-0.9.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (590.2KiB)
httptools-0.9.0-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (517.0KiB)
httptools-0.9.0-cp315-cp315t-musllinux_1_2_aarch64.whl (557.5KiB)
httptools-0.9.0-cp315-cp315t-musllinux_1_2_ppc64le.whl (565.6KiB)
httptools-0.9.0-cp315-cp315t-musllinux_1_2_riscv64.whl (512.6KiB)
httptools-0.9.0-cp315-cp315t-musllinux_1_2_x86_64.whl (555.3KiB)
httptools-0.9.0-cp315-cp315t-win32.whl (91.8KiB)
httptools-0.9.0-cp315-cp315t-win_amd64.whl (98.5KiB)
httptools-0.9.0-cp315-cp315t-win_arm64.whl (93.7KiB)
httptools-0.9.0-cp39-cp39-macosx_11_0_arm64.whl (118.0KiB)
httptools-0.9.0-cp39-cp39-macosx_11_0_x86_64.whl (113.8KiB)
httptools-0.9.0-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (476.4KiB)
httptools-0.9.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (476.1KiB)
httptools-0.9.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (501.6KiB)
httptools-0.9.0-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (440.5KiB)
httptools-0.9.0-cp39-cp39-musllinux_1_2_aarch64.whl (460.7KiB)
httptools-0.9.0-cp39-cp39-musllinux_1_2_ppc64le.whl (484.7KiB)
httptools-0.9.0-cp39-cp39-musllinux_1_2_riscv64.whl (435.2KiB)
httptools-0.9.0-cp39-cp39-musllinux_1_2_x86_64.whl (463.4KiB)
httptools-0.9.0-cp39-cp39-win32.whl (84.8KiB)
httptools-0.9.0-cp39-cp39-win_amd64.whl (91.2KiB)
httptools-0.9.0-cp39-cp39-win_arm64.whl (88.0KiB)
httptools-0.9.0.tar.gz (275.9KiB)
No dependencies