Skip to main content
Archived

This project has been archived by its maintainers, and is no longer receiving any updates.

===============================
Hyper: HTTP/2 Client for Python
===============================

.. image:: https://travis-ci.org/Lukasa/hyper.png?branch=master
:target: https://travis-ci.org/Lukasa/hyper

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('twitter.com:443')
conn.request('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`` provides support for drafts 14, 15, and 16 of the HTTP/2 draft
specification and draft 9 of the HPACK draft specification. As further drafts
are released, ``hyper`` will be updated to support them.

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`_.

.. _read the contribution guidelines: http://hyper.readthedocs.org/en/development/contributing.html

License
=======

``hyper`` is made available under the MIT License. For more details, see the
``LICENSE`` file in the repository.

Authors
=======

``hyper`` is maintained by Cory Benfield, with contributions from others. For
more details about the contributors, please see ``CONTRIBUTORS.rst``.


Release History
===============

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 *

- Fixed ``AttributeError`` being raised when a PING frame was received, thanks
to @t2y. (`Issue #79`_)
- Fixed bug where large frames could be incorrectly truncated by the buffered
socket implementation, thanks to @t2y. (`Issue #80`_)

.. _Issue #79: https://github.com/Lukasa/hyper/issues/79
.. _Issue #80: https://github.com/Lukasa/hyper/issues/80

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`_)

.. _Issue #24: https://github.com/Lukasa/hyper/issues/24
.. _Issue #26: https://github.com/Lukasa/hyper/issues/26
.. _Issue #27: https://github.com/Lukasa/hyper/issues/27
.. _Issue #33: https://github.com/Lukasa/hyper/issues/33
.. _Issue #37: https://github.com/Lukasa/hyper/issues/37
.. _Issue #39: https://github.com/Lukasa/hyper/issues/39
.. _Issue #40: https://github.com/Lukasa/hyper/issues/40
.. _Issue #41: https://github.com/Lukasa/hyper/issues/41
.. _Issue #46: https://github.com/Lukasa/hyper/issues/46
.. _Issue #48: https://github.com/Lukasa/hyper/issues/48
.. _Issue #50: https://github.com/Lukasa/hyper/issues/50
.. _Issue #52: https://github.com/Lukasa/hyper/issues/52
.. _Issue #56: https://github.com/Lukasa/hyper/issues/56
.. _Issue #60: https://github.com/Lukasa/hyper/issues/60
.. _Issue #71: https://github.com/Lukasa/hyper/issues/71
.. _nghttp2: https://nghttp2.org/

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`_)

.. _Issue #9: https://github.com/Lukasa/hyper/issues/9
.. _Issue #13: https://github.com/Lukasa/hyper/issues/13
.. _Issue #14: https://github.com/Lukasa/hyper/issues/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`_)


.. _Issue #12: https://github.com/Lukasa/hyper/issues/12
.. _Issue #16: https://github.com/Lukasa/hyper/issues/16
.. _Issue #13: https://github.com/Lukasa/hyper/issues/13
.. _Issue #20: https://github.com/Lukasa/hyper/issues/20
.. _Issue #19: https://github.com/Lukasa/hyper/issues/19
.. _Issue #22: https://github.com/Lukasa/hyper/issues/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.

Release files for hyper 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hyper 0.1.1
File Size Uploaded
hyper-0.1.1.tar.gz 228.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hyper 0.1.1
File Interpreter ABI Platform
hyper-0.1.1-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 450.1 kB

Release files / hyper-0.1.1.tar.gz

Download URL hyper-0.1.1.tar.gz
Size 228.9 kB
Tags Source
SHA-256 checksum
How to use checksums
9b8b1fb5cf9823ec8e44ad2db40284cd1c736b6ed1a84378d0a48d06531db9d4
BLAKE2b-256 checksum
How to use checksums
5797b1652f71b0c2c5653ac78137045db1cb2f50b2b98f54bc692165706f002b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / hyper-0.1.1-py2.py3-none-any.whl

Download URL hyper-0.1.1-py2.py3-none-any.whl
Size 221.1 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
1c18078da3cc4564b9c930019ea616042f6f326994c54c101eec5c610b09c875
BLAKE2b-256 checksum
How to use checksums
f0144587f57ec54956eb4e1a59b1e146a9d08baa2af887c37be512eac7044ab6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page