An implementation of QUIC and HTTP/3
Project description
What is qh3?
qh3 is a maintained fork of the aioquic library. It is lighter, faster, and more adapted to mass usage. Regularly improved and expect a better time to initial response in issues and PRs.
qh3 is a library for the QUIC network protocol in Python. It features a minimal TLS 1.3 implementation, a QUIC stack, and an HTTP/3 stack.
QUIC was standardized in RFC 9000 and HTTP/3 in RFC 9114. qh3 is regularly tested for interoperability against other QUIC implementations.
To learn more about qh3 please read the documentation.
Why should I use qh3?
qh3 has been designed to be embedded into Python client and server libraries wishing to support QUIC and/or HTTP/3. The goal is to provide a common codebase for Python libraries in the hope of avoiding duplicated effort.
Both the QUIC and the HTTP/3 APIs follow the “bring your own I/O” pattern, leaving actual I/O operations to the API user. This approach has a number of advantages including making the code testable and allowing integration with different concurrency models.
This library is the lowest level you can find for handling QUIC and HTTP/3. Here are higher libraries:
mid-way: urllib3.future
highest and easiest: niquests (Recommended!)
Features
Requirements
qh3 requires Python 3.7 or greater.
Running the examples
qh3 comes with a number of examples illustrating various QUIC use cases.
You can browse these examples here: https://github.com/Ousret/qh3/tree/main/examples
License
qh3 is released under the BSD license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for qh3-0.15.0-pp310-pypy310_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 245c34925783b119aa0353e1878ce9b7c50ef32fbb0969bc535530aa37bd73aa |
|
MD5 | eb0a45fb794cbf684c7381ac13f00947 |
|
BLAKE2b-256 | 2b46b5492196451460942d18131daed600ab510b020dec7d02812dbd9ebee0d7 |
Hashes for qh3-0.15.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8ce1dbfb3740b7be8b8d4aa808e1a58b9f87f3041abc6ca6bd0b8d4d6a87e340 |
|
MD5 | 06a2dea17d6aeb244871a49aa61c93da |
|
BLAKE2b-256 | e69ad04c031212f05ef496fd657f9e56cb2a443fb4adbdcca79cd17f7f5e5790 |
Hashes for qh3-0.15.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 024c35288fe0ddf1c0dbbbe24cbf98a8f73c0bc24932cb96900b82faf236489c |
|
MD5 | 5a9eec096c1cd38d6a35f769af4b813a |
|
BLAKE2b-256 | b2221fe9f570bbd1c6a5ac725ef69f0cb74fd298940749b0892f925f1802d702 |
Hashes for qh3-0.15.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7efbebb80e6cff0d0248cda013614bfa4c9358c448dd4557b1300dc13ef261d8 |
|
MD5 | 7f1f1b5533d1d0cc322ac3250212877b |
|
BLAKE2b-256 | 7a00853fab1ddb8cbebcc55f31c6df2b35f79f50a5fe28c2f41e0855631ddf80 |
Hashes for qh3-0.15.0-pp39-pypy39_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 696c8886732ee335b1039d0cf9bc4bcc17e662faeec36e425d54812641742f76 |
|
MD5 | f5964999a6278a00f6ab749308d781dc |
|
BLAKE2b-256 | e2da3baf8b4f7f89093372bbfbcb175b942661fe06ddbec95339709ef951fd50 |
Hashes for qh3-0.15.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 342d2af5f9dc829b5a10c899f4afa92579c8cde6689d474148b95a9bb9411fce |
|
MD5 | 88968c84cc260a5d99debea2d733597c |
|
BLAKE2b-256 | 44de07d12e18e74d9de2dc719ce50df0f3d24a6afcd08329d7a3f5292fa4be15 |
Hashes for qh3-0.15.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9b9ac3ddd57f7570fd6c781bc29e53c9072a04b12aff59416330fc8c65eac677 |
|
MD5 | f93292086f0b86deeaea1385f0e34121 |
|
BLAKE2b-256 | ef0696347b27d7d338aa25c5c99a757cebdc5b50bd69f7cd86cf769c9a8d6d8b |
Hashes for qh3-0.15.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b08ab7e0b5b89cc50a0869868ece864d846d78d7f823925d07d392c6390ffb56 |
|
MD5 | 4a6830cc85008e13cfd3ff46ee6e13ee |
|
BLAKE2b-256 | 4263f1502d5496ffe6a96eedcbdc1a752adac250890cf4b378a1f2d7ffac3243 |
Hashes for qh3-0.15.0-pp38-pypy38_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | afa84ad6d0e0d194c69fc9ead08601a5f6b1841c7e51c2a8f8404d6080dc33d5 |
|
MD5 | c98369dada19ea2613d31fa98cdd7bef |
|
BLAKE2b-256 | fbdfedcbfd49f63e37589cbd1512afc3781082e4447095eb25f5555053670f27 |
Hashes for qh3-0.15.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c41e0cb6c654c90fcc49ece61c6080b8a65c9aab9a523830b9c06003396842b4 |
|
MD5 | 84113cd3913ab4ecd9027836328bfe3d |
|
BLAKE2b-256 | 54910fe5e5cab46fed9cef046c6f6c43e910dbdc0f5d90f75b7824ee69c564ca |
Hashes for qh3-0.15.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6eaf0e83982400f2ac21d7c325e16e6b6944c752dd211bbf93febb6ed0e67dda |
|
MD5 | f0d75730a131d75e828a631b0b97c268 |
|
BLAKE2b-256 | 364e980e6197fb710b5cdfd0bbc24e9e8332926e2a409a9162bea9ccd5726b09 |
Hashes for qh3-0.15.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0689f3cddceb235782de8b4864565eb8344500f19860233969e3b4a794f87da9 |
|
MD5 | f0b3b4dd4de7a1c2dfa3b56fdec401fb |
|
BLAKE2b-256 | bba949a40801ff832fee1a98153cb75f28e37557fb209e1bd3f47e4456e9fd73 |
Hashes for qh3-0.15.0-cp37-abi3-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 239a0dc4b1894b46eda287b1c5ed9a4cb4ee6fadf2f2a7123d25439c3c317d71 |
|
MD5 | 14980c56366100f5f61f44d3d11dbcb6 |
|
BLAKE2b-256 | f38d207f6518d442f0c9779a4c50809b3f3d00aceb6a333283d73f48ca12450e |
Hashes for qh3-0.15.0-cp37-abi3-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2f005276e50aa2717d497332932a8bda34cac36c8ba07b5b4979f91b9c1677d7 |
|
MD5 | d1af660c4124d96f3ab47a61931af540 |
|
BLAKE2b-256 | 4086617805b9410f49544caa51ee89fa612f669d65e9fd321a2407b2f5b5f4a9 |
Hashes for qh3-0.15.0-cp37-abi3-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ea074bc35d17058cdbabf2d5522eb4119ef30848b6c1245288c75bc03cccf48e |
|
MD5 | 8cf50819641451cbb07fea4392b49853 |
|
BLAKE2b-256 | c2a53fbaf557d044abd40650ec874b5784295c5ed6392075321ff3176126d832 |
Hashes for qh3-0.15.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | af19986f61f86a0d7704f23b6d1944d3123fb6d18b05f5a84fb915b0b4632021 |
|
MD5 | ab000ea72afb706fffca142fc6ba68f5 |
|
BLAKE2b-256 | f79e514e3d4599963406f5920513b8d28b4b7903c9923bc816e998d2c46c2622 |
Hashes for qh3-0.15.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a2fbe9d84aa75c630f57fba2a237b4398dfb45905204b15f749b15bb65063e89 |
|
MD5 | 673c2576fc5af47453d5e71cc7fc2f50 |
|
BLAKE2b-256 | 36092f5da2183c16e7ef2972d8f946d78893a444e318c747c26c3f89fbc605c7 |
Hashes for qh3-0.15.0-cp37-abi3-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27da779a85c38f85136b403c26c9465b8afc52e5235c0a2ea7e75ca1cad0edf5 |
|
MD5 | 57d542589bfda63b21c82d832c710455 |
|
BLAKE2b-256 | 8c2cc3c72bf88e19650f5dc342bca30f9db1aab5567e7baa6b0fc990256ad652 |
Hashes for qh3-0.15.0-cp37-abi3-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 051df61257ad8c7ed04e84435aa57f42869b86384c7e4510242b1bc74692cb9c |
|
MD5 | b3a46802a9ab69751a9ed96b67ef81a6 |
|
BLAKE2b-256 | 3a4c34092435c48901f72e66221c7cbf4f7c81e8ba96e2dd3e4ef7a9fe078561 |