HTTP/2 Client for Python
Project description
HTTP is changing under our feet. HTTP/1.1, our old friend, is being supplemented by the brand new HTTP/2 standard. HTTP/2 provides many benefits: improved speed, lower bandwidth usage, better connection management, and more.
hyper provides these benefits to your Python code. How? Like this:
from hyper import HTTP20Connection conn = HTTP20Connection('http2bin.org:443') conn.request('GET', '/get') resp = conn.getresponse() print(resp.read())
Simple.
Caveat Emptor!
Please be warned: hyper is in a very early alpha. You will encounter bugs when using it. In addition, there are very many rough edges. With that said, please try it out in your applications: I need your feedback to fix the bugs and file down the rough edges.
Versions
hyper supports the final draft of the HTTP/2 specification: additionally, it provides support for drafts 14, 15, and 16 of the HTTP/2 specification. It also supports the final draft of the HPACK specification.
Compatibility
hyper is intended to be a drop-in replacement for http.client, with a similar API. However, hyper intentionally does not name its classes the same way http.client does. This is because most servers do not support HTTP/2 at this time: I don’t want you accidentally using hyper when you wanted http.client.
Contributing
hyper welcomes contributions from anyone! Unlike many other projects we are happy to accept cosmetic contributions and small contributions, in addition to large feature requests and changes.
Before you contribute (either by opening an issue or filing a pull request), please read the contribution guidelines.
License
hyper is made available under the MIT License. For more details, see the LICENSE file in the repository.
Release History
0.2.2 (2015-04-03)
Bugfixes
Hyper now correctly handles ‘never indexed’ header fields. (Issue #110)
0.2.1 (2015-03-29)
New Features
There is now a hyper command-line client that supports making HTTP/2 requests directly from the command-line.
Major Changes
Support for the final drafts of HTTP/2 and HPACK. Updated to offer the ‘h2’ ALPN token.
Minor Changes
We not only remove the Connection header but all headers it refers to.
0.2.0 (2015-02-07)
Major Changes
Python 2.7.9 is now fully supported.
0.1.2 (2015-02-07)
Minor Changes
We now remove the Connection header if it’s given to us, as that header is not valid in HTTP/2.
Bugfixes
Adds workaround for HTTPie to make our responses look more like urllib3 responses.
0.1.1 (2015-02-06)
Minor Changes
Support for HTTP/2 draft 15, and 16. No drop of support for draft 14.
Updated bundled certificate file.
Bugfixes
0.1.0 (2014-08-16)
Regressions and Known Bugs
Support for Python 3.3 has been temporarily dropped due to features missing from the Python 3.3 ssl module. PyOpenSSL has been identified as a replacement, but until NPN support is merged it cannot be used. Python 3.3 support will be re-added when a suitable release of PyOpenSSL is shipped.
Technically this release also includes support for PyPy and Python 2.7. That support is also blocked behind a suitable PyOpenSSL release.
For more information on these regressions, please see Issue #37.
Major Changes
Support for HPACK draft 9.
Support for HTTP/2 draft 14.
Support for Sever Push, thanks to @alekstorm. (Issue #40)
Use a buffered socket to avoid unnecessary syscalls. (Issue #56)
If nghttp2 is present, use its HPACK encoder for improved speed and compression efficiency. (Issue #60)
Add HTTP20Response.gettrailer() and HTTP20Response.gettrailers(), supporting downloading and examining HTTP trailers. (Discussed in part in Issue #71.)
Bugfixes
HTTP20Response objects are context managers. (Issue #24)
Pluggable window managers are now correctly informed about the document size. (Issue #26)
Header blocks can no longer be corrupted if read in a different order to the one in which they were sent. (Issue #39)
Default window manager is now smarter about sending WINDOWUPDATE frames. (Issue #41 and Issue #52)
Fixed inverted window sizes. (Issue #27)
Correct reply to PING frames. (Issue #48)
Made the wheel universal, befitting a pure-Python package. (Issue #46)
HPACK encoder correctly encodes header sets with duplicate headers. (Issue #50)
0.0.4 (2014-03-08)
Add logic for pluggable objects to manage the flow-control window for both connections and streams.
Raise new HPACKDecodingError when we’re unable to validly map a Huffman-encoded string.
Correctly respect the HPACK EOS character.
0.0.3 (2014-02-26)
Use bundled SSL certificates in addition to the OS ones, which have limited platform availability. (Issue #9)
Connection objects reset to their basic state when they’re closed, enabling them to be reused. Note that they may not be reused if exceptions are thrown when they’re in use: you must open a new connection in that situation.
Connection objects are now context managers. (Issue #13)
The HTTP20Adapter correctly reuses connections.
Stop sending WINDOWUPDATE frames with a zero-size window increment.
Provide basic functionality for gracelessly closing streams.
Exhausted streams are now disposed of. (Issue #14)
0.0.2 (2014-02-20)
Implemented logging. (Issue #12)
Stopped HTTP/2.0 special headers appearing in the response headers. (Issue #16)
HTTP20Connection objects are now context managers. (Issue #13)
Response bodies are automatically decompressed. (Issue #20)
Provide a requests transport adapter. (Issue #19)
Fix the build status indicator. (Issue #22)
0.0.1 (2014-02-11)
Initial Release
Support for HTTP/2.0 draft 09.
Support for HPACK draft 05.
Support for HTTP/2.0 flow control.
Verifies TLS certificates.
Support for streaming uploads.
Support for streaming downloads.
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 Distribution
Hashes for hyper-0.2.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a3197c5b91ffffd122105445ea2b5f92fedb9b8ee094abd3e56f83b546819bbb |
|
MD5 | 9655f3ce72bb67897a7b792127e610f8 |
|
BLAKE2b-256 | 5dd74cba10e71ff38d457f1a681e1a98c7f97a0df64d81d1bc6a8336bfbac212 |