freshcrate
Skin:/
Home > Frameworks > httptools

httptools

A collection of framework independent HTTP protocol utils.

Why this rank:Strong adoptionRecent releaseHealthy release cadence

Description

![Tests](https://github.com/MagicStack/httptools/workflows/Tests/badge.svg) 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](https://github.com/nodejs/llhttp)) and a function for parsing URLs `httptools.parse_url` (through [http-parse](https://github.com/nodejs/http-parser) for now). See unittests for examples. ```python 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.

Release History

VersionChangesUrgencyDate
v0.8.0Changes ======= * Add http-parser and llhttp licenses into the wheels (#135) (by @justeph in c398a157) * Mark cython module as free-threading compatible (#139) (by @kumaraditya303 in 28d1db15) * Fix all typing issues (#134) (by @Kludex in a9bda0ed) * Bump llhttp to 9.4.1 (#145) (by @fantix in e3e8d71e) * Security: fix URL truncation issue (#144) (by @fantix in a0283f07 for #142) * Allow building with latest setuptools (#138) (by @OldManYellsAtCloud in c403ad1High5/25/2026
0.7.1Imported from PyPI (0.7.1)Low4/21/2026
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.1This is identical to 0.7.0 whose CI failed uploadingLow10/10/2025
v0.7.0Changes ======= * Modernize packaging and fix CI (#130) Drop Python 3.8, add Python 3.14 Use Cython 3.1.0 Bump llhttp to 9.3.0 (by @ngoldbaum @Carreau @fantix in 59bf94fc for #129) * Static Type-checking for httptools (#100) (by @Vizonex @KRRT7 in b55f5fe2 for #100)Low10/10/2025
v0.6.4Fixes ===== * Include Cython source files in sdist (by @mgorny in 2287a95a for #115)Low10/16/2024
v0.6.3Fixes ===== * Fix missing CR is some tests (by @mgorny in 21a199d3 for #112) * Bump bundled llhttp to 9.2.1 Fixes CVE-2024-27982 (by @elprans in 560bd9ea for #113)Low10/16/2024
v0.6.2Fixes ===== * Fix build and run tests on Python 3.13 (#107) (by @jameshilliard @tacaswell @fafanoulele @fantix in ad9765b3 for #98 #104)Low10/14/2024
v0.6.1Changes ======= * Explicit Python 3.12 support and build wheels, change min version to 3.8 (#95) (by @tiptenbrink in 25f412bd for #95) * Do not install the *.c sources in wheels (#73) (by @hroncok in b2fc5bdf for #73)Low10/16/2023
v0.6.0Changes ======= * Bump bundled llhttp to 8.1.1 Fixes CVE-2023-30589 (by @fantix in 6c6812a for #91)Low7/6/2023
v0.5.0UPDATE: The bundled copy of llhttp in this release is vulnerable to CVE-2023-30589, please update to use 0.6.0 instead. Changes ======= * Bump bundled llhttp to 6.0.9 fixes CVE-2022-32213, CVE-2022-32214, CVE-2022-32215 (by @nlsj1985 in 56d6a163 for #83) * Test and build against Python 3.11 (by @elprans in 509cd149 for #84)Low9/13/2022
v0.4.0Changes ======= * Bump bundled http-parser to 2.9.4 and llhttp to 6.0.6 fixes CVE-2021-22959 & CVE-2021-22960 (by @elprans in 4d5dddd3 for #77)Low2/22/2022
v0.3.0This release has no functional changes, only packaging: Python 3.5 is EOL, so wheels are no longer built, and Python 3.10 has been added to the roster along with aarch64 wheels on Linux and universal2 wheels on macOS. Changes: * Use cibuildwheel to build release wheels (by @elprans in 2f57b6b7)Low8/10/2021
v0.1.1Restore Python 3.5 support (#48).Low4/26/2021
v0.1.2# Bug Fixes * Fix `httptools.__all__` (by @elprans in 9340d321 for #52) # Build * Add Python 3.9 in the build/test matrix (by @b0g3r in e2d1a464 for #62)Low4/26/2021
v0.2.0# New Features * Swap http-parse to llhttp (by @victoraugustolls and @fantix in 63b5de2b for #56) # Bug Fixes * Fix `httptools.__all__` (by @elprans in 9340d321 for #52) # Build * Add Python 3.9 in the build/test matrix (by @b0g3r in e2d1a464 for #62)Low4/23/2021
v0.1.0No functional changes from 0.0.13, except the new release flow and binary wheels.Low2/5/2020

Dependencies & License Audit

Loading dependencies...

Similar Packages

tqdmFast, Extensible Progress Meterv4.68.1
inspect-aiFramework for large language model evaluationsmain@2026-06-05
hypothesisThe property-based testing library for Pythonv6.155.2
bleachAn easy safelist-based HTML-sanitizing tool.main@2026-06-05
jupyter-clientJupyter protocol implementation and client librariesv8.9.0

More from pypi

markitdownUtility tool for converting various files to Markdown
fastapiFastAPI framework, high performance, easy to learn, fast to code, ready for production
djangoA high-level Python web framework that encourages rapid development and clean, pragmatic design.
flaskA simple framework for building complex web applications.

More in Frameworks

langchainThe agent engineering platform
deer-flowAn open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message gateway, it handles different levels of ta
tqdmFast, Extensible Progress Meter
simBuild, deploy, and orchestrate AI agents. Sim is the central intelligence layer for your AI workforce.