nahpackpy

Python HPACK library using nahpack


Keywords
hpack, http2, header, compression, encoding, rfc, 7541, python
Licenses
MPL-2.0/libpng-2.0
Install
pip install nahpackpy==0.1.0

Documentation

nahpackpy

nahpackpy is an HTTP/2 RFC 7541 HPACK library. It wraps the Rust nahpack library.

Usage

>>> from nahpackpy import Decoder
>>> decoder = Decoder()
>>> headers = decoder.decode_block(
        b'\x82\x86\x84A\x8c\xf1\xe3\xc2\xe5\xf2:k\xa0\xab\x90\xf4\xff'
    )
>>> for header in headers:
        print(header)
Header(name=b':method', value=b'GET')
Header(name=b':scheme', value=b'http')
Header(name=b':path', value=b'/')
Header(name=b':authority', value=b'www.example.com')
>>> from nahpackpy import Encoder
>>> encoder = Encoder()
>>> encoder.encode_block((
        (b':method', b'GET'),
        (b':scheme', b'http'),
        (b':path', b'/'),
        (b':authority', b'www.example.com'),
    ))
b'\x82\x86\x84A\x8c\xf1\xe3\xc2\xe5\xf2:k\xa0\xab\x90\xf4\xff'

Installation

Installation from source requires the use of the Rust language for compilation of extensions. The "Nightly" channel of rust is required. Download a package from rust-lang.org.

You can then create a wheel, which will contain the compiled shared library, by running make. Or, run python setup.py install to install in your current environment.

Misc

nahpackpy is licensed under the Mozilla Public License, Version 2.0.

The author's repository is https://github.com/ijl/nahpackpy, and the repository's commmits are signed with the below key of ijl@mailbox.org:

-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=P4eL
-----END PGP PUBLIC KEY BLOCK-----