httptools 0.7.1


pip install httptools

  Latest version

Released: Oct 10, 2025

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
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.7.1-cp310-cp310-macosx_10_9_universal2.whl (199.7KiB)
httptools-0.7.1-cp310-cp310-macosx_11_0_arm64.whl (106.8KiB)
httptools-0.7.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (430.6KiB)
httptools-0.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (430.1KiB)
httptools-0.7.1-cp310-cp310-musllinux_1_2_aarch64.whl (415.3KiB)
httptools-0.7.1-cp310-cp310-musllinux_1_2_x86_64.whl (414.5KiB)
httptools-0.7.1-cp310-cp310-win_amd64.whl (84.2KiB)
httptools-0.7.1-cp311-cp311-macosx_10_9_universal2.whl (201.7KiB)
httptools-0.7.1-cp311-cp311-macosx_11_0_arm64.whl (107.8KiB)
httptools-0.7.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (445.9KiB)
httptools-0.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (444.3KiB)
httptools-0.7.1-cp311-cp311-musllinux_1_2_aarch64.whl (429.9KiB)
httptools-0.7.1-cp311-cp311-musllinux_1_2_x86_64.whl (430.0KiB)
httptools-0.7.1-cp311-cp311-win_amd64.whl (84.8KiB)
httptools-0.7.1-cp312-cp312-macosx_10_13_universal2.whl (201.4KiB)
httptools-0.7.1-cp312-cp312-macosx_11_0_arm64.whl (107.4KiB)
httptools-0.7.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (505.5KiB)
httptools-0.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (499.5KiB)
httptools-0.7.1-cp312-cp312-musllinux_1_2_aarch64.whl (483.6KiB)
httptools-0.7.1-cp312-cp312-musllinux_1_2_x86_64.whl (487.5KiB)
httptools-0.7.1-cp312-cp312-win_amd64.whl (84.7KiB)
httptools-0.7.1-cp313-cp313-macosx_10_13_universal2.whl (198.1KiB)
httptools-0.7.1-cp313-cp313-macosx_11_0_arm64.whl (105.6KiB)
httptools-0.7.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (467.4KiB)
httptools-0.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (462.2KiB)
httptools-0.7.1-cp313-cp313-musllinux_1_2_aarch64.whl (444.8KiB)
httptools-0.7.1-cp313-cp313-musllinux_1_2_x86_64.whl (447.6KiB)
httptools-0.7.1-cp313-cp313-win_amd64.whl (83.7KiB)
httptools-0.7.1-cp314-cp314-macosx_10_13_universal2.whl (198.8KiB)
httptools-0.7.1-cp314-cp314-macosx_11_0_arm64.whl (106.2KiB)
httptools-0.7.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (461.8KiB)
httptools-0.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (459.8KiB)
httptools-0.7.1-cp314-cp314-musllinux_1_2_aarch64.whl (442.0KiB)
httptools-0.7.1-cp314-cp314-musllinux_1_2_x86_64.whl (442.3KiB)
httptools-0.7.1-cp314-cp314-win_amd64.whl (86.1KiB)
httptools-0.7.1-cp39-cp39-macosx_10_9_universal2.whl (201.6KiB)
httptools-0.7.1-cp39-cp39-macosx_11_0_arm64.whl (107.7KiB)
httptools-0.7.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (431.2KiB)
httptools-0.7.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (430.5KiB)
httptools-0.7.1-cp39-cp39-musllinux_1_2_aarch64.whl (415.8KiB)
httptools-0.7.1-cp39-cp39-musllinux_1_2_x86_64.whl (415.0KiB)
httptools-0.7.1-cp39-cp39-win_amd64.whl (84.8KiB)
httptools-0.7.1.tar.gz (252.9KiB)
No dependencies