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-----