Package: 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.hyperprovides these benefits to your Python code. How? Like this:from hyper import HTTPConnection

conn = HTTPConnection('http2bin.org:443')
conn.request('GET', '/get')
resp = conn.get_response()

print(resp.read())Simple.Caveat Emptor!Please be warned:hyperis in a very early alpha. Youwillencounter 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.Versionshypersupports 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.Compatibilityhyperis intended to be a drop-in replacement forhttp.client, with a
similar API. However,hyperintentionally does not name its classes the
same wayhttp.clientdoes. This is because most servers do not support
HTTP/2 at this time: I don’t want you accidentally usinghyperwhen you
wantedhttp.client.DocumentationLooking to learn more? Documentation forhypercan be found onRead the Docs.Contributinghyperwelcomes 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),
pleaseread the contribution guidelines.Licensehyperis made available under the MIT License. For more details, see theLICENSEfile in the repository.Authorshyperis maintained by Cory Benfield, with contributions from others. For
more details about the contributors, please seeCONTRIBUTORS.rst.Release Historyv0.7.0 (2016-09-27)Major ChangesAdded apingmethod, allowing the user to use the HTTP/2PINGframe
to check connection liveness before, instead of, or between issuing requests.BugfixesDon’t send WINDOWUPDATE frames on closed streams.Clean up the outstanding stream reads on stream close.Ensured that connection state is always unconditionally reset on stream
close, regardless of whether the connection has a socket object open or not.0.6.2 (2016-06-13)BugfixesFixed packaging error made in prior release.0.6.1 (2016-06-13)BugfixesTolerate errors when attempting to send a RST_STREAM frame.Ensure that calls tofileno()on the compatibilitySSLSocketobject
actually work correctly. Thanks to @benlast!Improved some problems with thread-safety in theStreamclass. Thanks to
@fredthomsen!Allowed for systems to use hyper without the bundled cert file being present.
Thanks to @JasonGowthorpe!0.6.0 (2016-05-06)Major ChangesTheHTTP20Connectionobject is now thread-safe, so long as stream IDs are
used on all method calls.Replaced the HTTP/2 state machine logic entirely to use hyper-h2. This will
dramatically change the behaviour of the library in many situations, mostly
for the better. However, this is also likely to introduce new bugs, so please
be cautious.API ChangesAllow non-dictionary headers inrequest.HTTP20Connectionnow has aforce_protokeyword argument to allow theHTTP20Connectionto ignore the NPN/ALPN result.The--h2CLI flag now ignores the result of NPN/ALPN negotiation when
hitting HTTPS URLs.Added support for HTTPS client certificates.Notifications about streams being reset is now delayed to fire when the
stream in question is next accessed, rather than immediately.BugfixesOverriding HTTP/2 special headers no longer leads to ill-formed header blocks
with special headers at the end.Vastly improved IPv6 support.Fix converting unicode bodies to bytestrings on Python 2.7.Allow overriding the HTTP/2 pseudo-headers from the CLI.Fixed problems with incorrectly generating theHTTP2-Settingsheader.Improved handling of socket errors.0.5.0 (2015-10-11)Feature EnhancementPay attention to max frame length changes from remote peers. Thanks to
@jdecuyper!BugfixesPrevent hyper from emitting oversized frames. Thanks to @jdecuyper!Prevent hyper from emitting RST_STREAM frames whenever it finishes consuming
a stream.Prevent hyper from emitting lots of RST_STREAM frames.Hyper CLI tool now correctly uses TLS for anyhttps-schemed URL.Hyper CLI tool no longer attempts to decode bytes, instead writing them
straight to the terminal.Added new--h2flag to the Hyper CLI tool, which allows straight HTTP/2
in plaintext, rather than attempting to upgrade from HTTP/1.1.Allow arguments and keyword arguments in abstract version ofget_response.Software UpdatesUpdated hyperframe to version 2.1.00.4.0 (2015-06-21)New FeaturesHTTP/1.1 and HTTP/2 abstraction layer. Don’t specify what version you want to
use, just automatically get the best version the server supports!Support for upgrading plaintext HTTP/1.1 to plaintext HTTP/2, with thanks to
@fredthomsen! (Issue #28)HTTP11ConnectionandHTTPConnectionobjects are now both context
managers.Added support for ALPN negotiation when using PyOpenSSL. (Issue #31)Added support for user-provided SSLContext objects, with thanks to
@jdecuyper! (Issue #8)Better support for HTTP/2 error codes, with thanks to @jdecuyper!
(Issue #119)More gracefully close connections, with thanks to @jdecuyper! (Issue #15)Structural ChangesThe framing and HPACK layers were stripped out into their own libraries.BugfixesProperly verify hostnames when using PyOpenSSL.0.3.1 (2015-04-03)BugfixesFix blockingImportError. (Issue #114)0.3.0 (2015-04-03)New FeaturesHTTP/1.1 support! See the documentation for more. (Issue #75)Implementation of aHTTPHeaderMapdata structure that provides dictionary
style lookups while retaining all the semantic information of HTTP headers.Major ChangesVarious changes in the HTTP/2 APIs:Thegetheader,getheaders,gettrailer, andgettrailersmethods on the response object have been removed, replaced instead with
simple.headersand.trailersproperties that containHTTPHeaderMapstructures.Headers and trailers are now bytestrings, rather than unicode strings.Aniter_chunked()method was added to response objects that allows
iterating over data in units of individual data frames.Changed the name ofgetresponse()toget_response(), becausegetresponse()was a terrible name forced upon me by httplib.0.2.2 (2015-04-03)BugfixesHyper now correctly handles ‘never indexed’ header fields. (Issue #110)0.2.1 (2015-03-29)New FeaturesThere is now ahypercommand-line client that supports making HTTP/2
requests directly from the command-line.Major ChangesSupport for the final drafts of HTTP/2 and HPACK. Updated to offer the ‘h2’
ALPN token.Minor ChangesWe not only remove the Connection header but all headers it refers to.0.2.0 (2015-02-07)Major ChangesPython 2.7.9 is now fully supported.0.1.2 (2015-02-07)Minor ChangesWe now remove theConnectionheader if it’s given to us, as that header
is not valid in HTTP/2.BugfixesAdds workaround for HTTPie to make our responses look more like urllib3
responses.0.1.1 (2015-02-06)Minor ChangesSupport for HTTP/2 draft 15, and 16. No drop of support for draft 14.Updated bundled certificate file.BugfixesFixedAttributeErrorbeing 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)0.1.0 (2014-08-16)Regressions and Known BugsSupport for Python 3.3 has been temporarily dropped due to features missing
from the Python 3.3sslmodule. PyOpenSSL has been identified as a
replacement, but until NPN support is merged it cannot be used. Python 3.3
supportwillbe 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 seeIssue #37.Major ChangesSupport 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)Ifnghttp2is present, use its HPACK encoder for improved speed and
compression efficiency. (Issue #60)AddHTTP20Response.gettrailer()andHTTP20Response.gettrailers(),
supporting downloading and examining HTTP trailers. (Discussed in part inIssue #71.)BugfixesHTTP20Responseobjects 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 #41andIssue #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 newHPACKDecodingErrorwhen 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)TheHTTP20Adaptercorrectly 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)HTTP20Connectionobjects 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 ReleaseSupport 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.