httptools 0.8.0


pip install httptools

  Latest version

Released: May 25, 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 (additional flags: t) 3.14
macosx_10_13_universal2
macosx_10_9_universal2
macosx_11_0_arm64
manylinux1_x86_64
manylinux2014_aarch64
manylinux_2_17_aarch64
manylinux_2_28_aarch64
manylinux_2_28_x86_64
manylinux_2_5_x86_64
musllinux_1_2_aarch64
musllinux_1_2_x86_64
win_amd64

Files in release

httptools-0.8.0-cp310-cp310-macosx_10_9_universal2.whl (203.9KiB)
httptools-0.8.0-cp310-cp310-macosx_11_0_arm64.whl (110.9KiB)
httptools-0.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (439.5KiB)
httptools-0.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (440.5KiB)
httptools-0.8.0-cp310-cp310-musllinux_1_2_aarch64.whl (425.9KiB)
httptools-0.8.0-cp310-cp310-musllinux_1_2_x86_64.whl (426.8KiB)
httptools-0.8.0-cp310-cp310-win_amd64.whl (88.3KiB)
httptools-0.8.0-cp311-cp311-macosx_10_9_universal2.whl (203.5KiB)
httptools-0.8.0-cp311-cp311-macosx_11_0_arm64.whl (110.7KiB)
httptools-0.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (453.8KiB)
httptools-0.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (453.4KiB)
httptools-0.8.0-cp311-cp311-musllinux_1_2_aarch64.whl (439.3KiB)
httptools-0.8.0-cp311-cp311-musllinux_1_2_x86_64.whl (441.6KiB)
httptools-0.8.0-cp311-cp311-win_amd64.whl (88.9KiB)
httptools-0.8.0-cp312-cp312-macosx_10_13_universal2.whl (203.4KiB)
httptools-0.8.0-cp312-cp312-macosx_11_0_arm64.whl (110.4KiB)
httptools-0.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (511.6KiB)
httptools-0.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (506.7KiB)
httptools-0.8.0-cp312-cp312-musllinux_1_2_aarch64.whl (489.5KiB)
httptools-0.8.0-cp312-cp312-musllinux_1_2_x86_64.whl (497.6KiB)
httptools-0.8.0-cp312-cp312-win_amd64.whl (88.8KiB)
httptools-0.8.0-cp313-cp313-macosx_10_13_universal2.whl (200.3KiB)
httptools-0.8.0-cp313-cp313-macosx_11_0_arm64.whl (108.8KiB)
httptools-0.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (475.0KiB)
httptools-0.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (471.1KiB)
httptools-0.8.0-cp313-cp313-musllinux_1_2_aarch64.whl (453.6KiB)
httptools-0.8.0-cp313-cp313-musllinux_1_2_x86_64.whl (460.3KiB)
httptools-0.8.0-cp313-cp313-win_amd64.whl (88.0KiB)
httptools-0.8.0-cp314-cp314-macosx_10_13_universal2.whl (201.4KiB)
httptools-0.8.0-cp314-cp314-macosx_11_0_arm64.whl (109.5KiB)
httptools-0.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (470.3KiB)
httptools-0.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (469.6KiB)
httptools-0.8.0-cp314-cp314-musllinux_1_2_aarch64.whl (452.3KiB)
httptools-0.8.0-cp314-cp314-musllinux_1_2_x86_64.whl (455.7KiB)
httptools-0.8.0-cp314-cp314-win_amd64.whl (90.5KiB)
httptools-0.8.0-cp314-cp314t-macosx_10_13_universal2.whl (210.0KiB)
httptools-0.8.0-cp314-cp314t-macosx_11_0_arm64.whl (114.7KiB)
httptools-0.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (545.4KiB)
httptools-0.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (558.2KiB)
httptools-0.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl (530.6KiB)
httptools-0.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl (526.9KiB)
httptools-0.8.0-cp314-cp314t-win_amd64.whl (105.7KiB)
httptools-0.8.0-cp39-cp39-macosx_10_9_universal2.whl (205.9KiB)
httptools-0.8.0-cp39-cp39-macosx_11_0_arm64.whl (111.9KiB)
httptools-0.8.0-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (440.8KiB)
httptools-0.8.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (441.7KiB)
httptools-0.8.0-cp39-cp39-musllinux_1_2_aarch64.whl (426.9KiB)
httptools-0.8.0-cp39-cp39-musllinux_1_2_x86_64.whl (428.1KiB)
httptools-0.8.0-cp39-cp39-win_amd64.whl (89.1KiB)
httptools-0.8.0.tar.gz (265.0KiB)
No dependencies