An implementation of QUIC and HTTP/3
Project description
What is qh3?
qh3 is a maintained fork of the aioquic library. It is lighter, 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 Distribution
Built Distributions
Hashes for qh3-0.15.1-pp310-pypy310_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f68ac19161aaef887351f2e8df1972d91726ade69105b4ae1653ab0e70a18536 |
|
MD5 | 95c71239d4817939b48580c91a985dc2 |
|
BLAKE2b-256 | 63b309fc0a3707763ac75a0436d363123d9a1519ae02e319c91b6a162715e8e9 |
Hashes for qh3-0.15.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 71ab5d62606556c0ba2b1f3bf118dcb2d6f0236add792ffba42845a741abe498 |
|
MD5 | 1b530812c8592501653d0b5ef900b8da |
|
BLAKE2b-256 | 47ba439a8bce3e65dc05bd9ed7dc43e3d1cbf4d99b340412ec501390c16df376 |
Hashes for qh3-0.15.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9562c2648a0e468cc3c97e77c658c0b9db288e29cfc79d52220e50ddcfac9fe9 |
|
MD5 | e9010bc022839b608bc8cb7465233c56 |
|
BLAKE2b-256 | 295a298efac7769287a6304b4e7379096c198fe5ccb8de9312d104020c5ade13 |
Hashes for qh3-0.15.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 592bd246325090ffe8324761808713b1c99c7b7cae37ec4bd2841d0054729422 |
|
MD5 | 3b77f0f5976cbfb1a7e010837773618e |
|
BLAKE2b-256 | 58efc1fb7aefc107fb8327e61c890f7389e963584462abd84304fdd0aacd5da4 |
Hashes for qh3-0.15.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8c000a32d2d3dadf252a55d71f676011f02c0e529024176d35e53122293d8a54 |
|
MD5 | ad6815e1dc3dbcf866adb18d66ced5ea |
|
BLAKE2b-256 | 3f405b9f885458befde91dc94c173f10d3b9080a709d730e461706e8d6abc77a |
Hashes for qh3-0.15.1-pp39-pypy39_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 969582d286be3e468ff5e53cdf2a5f47a942ea370f870a0276c4235a7ed13a71 |
|
MD5 | 63083816050c2ec1da239e1acc8f2b8c |
|
BLAKE2b-256 | d557d4ea0029ac2699e3855249238ac672b39fd647b4e94669d187102cf3120c |
Hashes for qh3-0.15.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 74cc03a94e605820f3c5882e47388e8d2d8616d51db57a6e5120d9f2344dc04a |
|
MD5 | bc695ab0f7d00f7d337c9216a80a8ae1 |
|
BLAKE2b-256 | 2020914bfad785919e55f05729768cfafc94baef5599aadc45883ef20f2f0d9d |
Hashes for qh3-0.15.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ec733c6a4da5ecf4448434562aba617ecfabbdef0a58df812684db7d03000070 |
|
MD5 | a1f1af00c84da5c6aef9e3c50bd52ba8 |
|
BLAKE2b-256 | a8cf0260da567779d0b2506e21b5c5c8e73b4944b4fbb0f462f8dae3984e60ef |
Hashes for qh3-0.15.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 939253ceaf5664c4e90f6317f0097839b6c8af627bb5905181f4fcbbc209c395 |
|
MD5 | 6f261f1ac1d457527c6c0074935a8020 |
|
BLAKE2b-256 | cdab6abaef91e2f1f4a903ed89db22036dccdb151db38c9520287311a58da531 |
Hashes for qh3-0.15.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 561ba4d84e617ecc0d7506f532da2814e672a06cdcb903209616f00c5da74c14 |
|
MD5 | c430d97e5f94ed938e83958b166471db |
|
BLAKE2b-256 | 88ad49884514cfd734103222425f362f13a24b57a6f6b9e123f97cee31a3d282 |
Hashes for qh3-0.15.1-pp38-pypy38_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 087da39ebd5a8608e8df0892860b4fdcd4ff83753d7312cead490de6f1bce504 |
|
MD5 | afaa42b466ada0211ca573df4c03d163 |
|
BLAKE2b-256 | b704b920859cd71b773a1dd64588bcc6d52a564cb7de5f525d3e9f329aadc8e6 |
Hashes for qh3-0.15.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5c87a0613efbc3d353a76a917044270caf43198890ffe702b3cbe9b44065c45e |
|
MD5 | 717db847a6e3c1531d8517b31bd0870f |
|
BLAKE2b-256 | e175e1fd0c19bd90bcb7b1fe3bb8dfa5e7f395515539cbf1658f9f694e49e3cb |
Hashes for qh3-0.15.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6bca27698ad110fabda026f844f453b1ac1a1e2d86729846f5be0cdc9e7df419 |
|
MD5 | 396b9e3242bae710ce236dcd38c458bc |
|
BLAKE2b-256 | 29f0d3abf1f79d430f3686cb8eed9155ebe07f444d79ac7e8378801c97a1689d |
Hashes for qh3-0.15.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 77673a9b02e19c4f81e419efa2aa4040dec10f0a6158788196d8b5ef6aafb0d9 |
|
MD5 | 0c32f83eb20effdeb8a4638c7212ee96 |
|
BLAKE2b-256 | 159626b06a367663bb9e6af599fd3c7d29dc74bbfbfff4727a8792fccb5959c7 |
Hashes for qh3-0.15.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1a842e65e57f8092f1fa185b1dc95556b1b695f06a4eb48dc9c07f018bd7a7ec |
|
MD5 | 46b3a1983989755fa41bfe3a3cd0d38e |
|
BLAKE2b-256 | 245484ddd7e81fe9352115285ae6e2aa304688aaeda3a99a8c5c65b458f10b6a |
Hashes for qh3-0.15.1-cp37-abi3-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1a0305b389cec13af879dee32c6584cff45a52865456e6645d84023ed8442d67 |
|
MD5 | 298e02dd96fb4fbf207460feddeb31ec |
|
BLAKE2b-256 | 45019883e7037dacdbd43f8422d86f45d90bce20a0c115e7c713f263ea5ad767 |
Hashes for qh3-0.15.1-cp37-abi3-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 87b61b59e3c692b70384430ccf634a228c54bb38ee6d974d76a7b086b356ecad |
|
MD5 | 51aaf91b78a9a43c62a07f12c73bb9ed |
|
BLAKE2b-256 | 40930dcd856883938b18cc7485f59ec960483c0aa66c28c0b87e5af2bc1a77b6 |
Hashes for qh3-0.15.1-cp37-abi3-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3923bb17dbdf91f060cb3b04cb8c2e3bf74d528a26f4c0e5365e311bade33b58 |
|
MD5 | 845d5f6259d7f81cdb5c835fa2487873 |
|
BLAKE2b-256 | b2c9037a7364395107994b380665730bdd125ab0a02bb912b03a361fde80bb86 |
Hashes for qh3-0.15.1-cp37-abi3-musllinux_1_1_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b7c4df89b03f90f67e372693c70f357dabc18908cb07dab21aa550c4f777017b |
|
MD5 | 9f4c1601cf8e357606f46ebe949f1e62 |
|
BLAKE2b-256 | c13bd652b260ca5fb608d97e20347554c9ef00f8435c0b975db6560244975f0d |
Hashes for qh3-0.15.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1074ee0e30fe825b60bd113767b56dcfe2f155e79f893d5180d4fd2adebaa1de |
|
MD5 | 8958deecbc3a26ea2380f6be0794a32a |
|
BLAKE2b-256 | 9c459361df825b0d82521423a049f949ba1d121658b12de8c26f977763bf9b76 |
Hashes for qh3-0.15.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 265240539a630cf458f3651f08bd07e4d46b2bf941a25e7f594321401701b30d |
|
MD5 | 4fbb68de8d5154b62af0cba710c01303 |
|
BLAKE2b-256 | 5c30b8df7f048872814b7866d27e76df438e1d380198c931eed6010ae4cf1f7f |
Hashes for qh3-0.15.1-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0afd9e7b90c90ff3e8c8e376020e3753936da0ce8db57ebb9fc95a50ba7e015d |
|
MD5 | 6a53b93914674c5a99494b505de77825 |
|
BLAKE2b-256 | 953c22c494a2f53ee990255cba4d11a6cd874972b2a369f798d55f13c96fe752 |
Hashes for qh3-0.15.1-cp37-abi3-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 114d04dd51d3d9eca76ce804fea60ccb0fcbe84be08dcca70f32e30e5736aa00 |
|
MD5 | 75caa81dd06a97f8eecc20ca68c53bcf |
|
BLAKE2b-256 | 843c6ebc8e3b4b2b902e899dff36678cf2ed5cb820eb7b12227cc9b253a0321f |
Hashes for qh3-0.15.1-cp37-abi3-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fe8f15e9fe5850508188ce38bdc89bda03d1a99ce3c2fbde6ee02d1d91edc557 |
|
MD5 | f521f2319ee3d813a6ffe258853e06a6 |
|
BLAKE2b-256 | e12eb5e5f4898d465707cb15c38b05674203ca70e1d137d530e312d72bf8f6df |