HTTP/2 for Python.

Related tags

HTTP Clients hyper
Overview

Hyper: HTTP/2 Client for Python

This project is no longer maintained!

Please use an alternative, such as HTTPX or others.

We will not publish further updates for hyper.

Potential security issues will not be addressed.


So long, and thanks for all the fish!


https://raw.github.com/Lukasa/hyper/development/docs/source/images/hyper.png

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 HTTPConnection

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

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.

Documentation

Looking to learn more? Documentation for hyper can be found on Read the Docs.

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.

Authors

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

Comments
  • Add hyper as a Command Line Interface

    Add hyper as a Command Line Interface

    I made the hyper command to run hyper quickly.

    To use cli, install again hyper.

    $ python setup.py develop
    

    For example, it's easy to run for simple debugging.

    $ hyper -v google.com
    Selected NPN: h2-14
    Sending frame SettingsFrame on stream 0
    Received frame SettingsFrame on stream 0
    Sending frame SettingsFrame on stream 0
    Received frame WindowUpdateFrame on stream 0
    HPACK encoding [(':method', 'GET'), (':scheme', 'https'), (':authority', 'google.com'), (':path', '/')]
    ...
    

    Other options are here. They're encoding or do not show response data, and so on.

    $ hyper -h
    usage: hyper [-h] [-e ENCODING] [-n] [-m METHOD] [-v] host [path]
    
    positional arguments:
      host                  set host to request
      path                  set path to resource (default: /)
    
    optional arguments:
      -h, --help            show this help message and exit
      -e ENCODING, --encoding ENCODING
                            set charset for content-type
      -n, --nullout         do not show response data
      -m METHOD, --method METHOD
                            set http method (default: GET)
      -v, --verbose         set verbose mode (loglevel=DEBUG)
    

    I'll implement if you want additional function or typical use. I have no idea what kind of functions is useful.

    opened by t2y 49
  • HTTP20Connection request and OpenSSL version

    HTTP20Connection request and OpenSSL version

    Any information on how to create a multipart body? On the code comments of hyper body is about a file-like object or bytestring

            v2_url = 'service.example.api.com'
            conn = HTTP20Connection(v2_url)
            conn.request('POST', '/endpoint', headers=headers, body='NOTHING_HERE_YET')
            resp = conn.get_response()
            return resp.read()
    

    Im getting this error exception when accessing a external api that expects a multipart body.

    {"code":"INVALID_REQUEST_EXCEPTION","description":"No multipart body found in the payload."}
    

    Any help, links to samples or hint would be appreciated.

    opened by lithiumlab 38
  • Implement draft 10 of the http2 spec

    Implement draft 10 of the http2 spec

    Besides the frame/settings renumbering, the biggest single change is the new DATA frame padding format.

    Unfortunately, it's currently impossible to fully conform to the v10 spec with solely the ssl standard library module at our disposal, so merging this should probably wait until a pyOpenSSL compatibility layer can be written that exposes the necessary TLS options.

    opened by alekstorm 33
  • Do headers properly.

    Do headers properly.

    I'm sick of Python implementations insisting that headers are dictionaries. They aren't, it's a bad match. We can and should do better. This is a proposed initial implementation that's in the spirit of what Go does, which I think is a substantially better model.

    Feedback is encouraged here. Note that this has been strongly influenced by shazow/urllib3#561, shazow/urllib3#562, shazow/urllib3#563, and shazow/urllib3#564.

    opened by Lukasa 26
  • Implement Python 2.7 support

    Implement Python 2.7 support

    Thanks for the comprehensive test suite; it made this port a snap. The only externally-facing change I had to make was removing the magic * argument in HTTP20Connection.__init__() - if you like, I can restore it on Python 3 with trickery a la SocketServerThread.

    Barring the introduction of pyOpenSSL, supporting NPN is impossible on Python 2.7, so for now, the client assumes the server speaks HTTP/2.0 (referred to in the spec as "with prior knowledge").

    An automatic migration tool like 2to3 was unneeded, and I think it's best to keep it that way.

    opened by alekstorm 26
  • hyper do not work on my Fedora

    hyper do not work on my Fedora

    I have problem with running Python hyper library that adds support for HTTP/2 protocol.

    On my Fedora machine I installed it with pip and pip3 to use it with Python 2.7.8 and Python 3.4.1. Then I copied test script that connects with twitter:

    from hyper import HTTP20Connection
    
    conn = HTTP20Connection('twitter.com:443')
    conn.request('GET', '/')
    resp = conn.getresponse()
    
    print(resp.read())
    

    I run it using Python 2.7.8 and it ends with error:

    [mn:/plib] 1 ‡ python hyper_test.py 
    Traceback (most recent call last):
      File "hyper_test.py", line 4, in <module>
        conn.request('GET', '/')
      File "/usr/lib/python2.7/site-packages/hyper/http20/connection.py", line 149, in request
        self.endheaders(message_body=body, final=True, stream_id=stream_id)
      File "/usr/lib/python2.7/site-packages/hyper/http20/connection.py", line 310, in endheaders
        self.connect()
      File "/usr/lib/python2.7/site-packages/hyper/http20/connection.py", line 215, in connect
        self._recv_cb()
      File "/usr/lib/python2.7/site-packages/hyper/http20/connection.py", line 580, in _recv_cb
        self._consume_single_frame()
      File "/usr/lib/python2.7/site-packages/hyper/http20/connection.py", line 496, in _consume_single_frame
        frame, length = Frame.parse_frame_header(header)
      File "/usr/lib/python2.7/site-packages/hyper/http20/frame.py", line 52, in parse_frame_header
        frame = FRAMES[type](stream_id)
    KeyError: 80
    

    It ends with different error with Python 3.4.1:

    [mn:/plib] 1 ‡ python3 hyper_test.py 
    Traceback (most recent call last):
      File "hyper_test.py", line 4, in <module>
        conn.request('GET', '/')
      File "/usr/lib/python3.4/site-packages/hyper/http20/connection.py", line 149, in request
        self.endheaders(message_body=body, final=True, stream_id=stream_id)
      File "/usr/lib/python3.4/site-packages/hyper/http20/connection.py", line 310, in endheaders
        self.connect()
      File "/usr/lib/python3.4/site-packages/hyper/http20/connection.py", line 204, in connect
        sock = wrap_socket(sock, self.host)
      File "/usr/lib/python3.4/site-packages/hyper/http20/tls.py", line 44, in wrap_socket
        assert ssl_sock.selected_npn_protocol() in H2_NPN_PROTOCOLS
    AssertionError
    

    What can cause such problems on my environment?

    PS I have also asked such question on StackOverflow: http://stackoverflow.com/questions/28990996/python-hyper-library-do-not-work-on-my-environment

    Bug 
    opened by michal-niklas 21
  • Issues with Amazon Alexa Voice Service

    Issues with Amazon Alexa Voice Service

    Amazon have released a new API for Alexa but its HTTP/2 only, this is my first attempts with http/2 but there seems to be a problem with accessing the amazon API using hyper, other test servers work fine and I can also connect using curl, I get this error using either hyper on the command line or in a script. (Token redacted to XXXXX, message me if you need a token to test with)

    root@AlexaPiV2:~/curl-7.48.0# hyper --debug GET https://avs-alexa-na.amazon.com/v20160207/directives 'Authorization:Bearer XXXXXXXXXXXXXXXX' Url Info: {'secure': True, 'fragment': None, 'netloc': 'avs-alexa-na.amazon.com', 'host': 'avs-alexa-na.amazon.com', 'query': None, 'path': '/v20160207/directives', 'scheme': 'https', 'port': 443} Commandline Argument: Namespace(_url='https://avs-alexa-na.amazon.com/v20160207/directives', body=None, debug=True, h2=False, headers={'Authorization': 'Bearer XXXXXXXXXXXX'}, items=[<hyper.cli.KeyValue object at 0x766c45f0>], method='GET', url=<hyper.cli.UrlInfo object at 0x766c4710>) Selected protocol: None Traceback (most recent call last): File "/usr/local/bin/hyper", line 11, in sys.exit(main()) File "/usr/local/lib/python2.7/dist-packages/hyper/cli.py", line 244, in main data = request(args) File "/usr/local/lib/python2.7/dist-packages/hyper/cli.py", line 234, in request response = conn.get_response() File "/usr/local/lib/python2.7/dist-packages/hyper/common/connection.py", line 124, in get_response return self._conn.get_response(_args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/hyper/http11/connection.py", line 199, in get_response response = self.parser.parse_response(self._sock.buffer) File "/usr/local/lib/python2.7/dist-packages/hyper/http11/parser.py", line 52, in parse_response version, status, reason = temp_buffer[0:index].split(None, 2) ValueError: need more than 1 value to unpack root@AlexaPiV2:~/curl-7.48.0#

    opened by sammachin 20
  • Check if length of frame is valid

    Check if length of frame is valid

    Fix for #69

    • Before processing a frame, check if its length is valid using the range defined by the spec.
    • Allow endpoint to update the max frame size setting.
    opened by jdecuyper 19
  •  self._sock is None inside of _single_read

    self._sock is None inside of _single_read

    I opened this with the apns2 package maintainer since that is where I discovered the bug but I think this is really a problem inside of hyper:

    https://github.com/Pr0Ger/PyAPNs2/issues/11

    self._sock is None when it hits this line:

    https://github.com/Lukasa/hyper/blob/development/hyper/http20/connection.py#L644

    It is a rare occurance but it does happen. Any thoughts on what could be causing it?

    opened by 72squared 18
  • Close connections gracefully

    Close connections gracefully

    Fix for #15

    • When shutting down the connection, close all streams and send a GoAway frame to the endpoint.
    • If an unexpected stream identifier is received then cancel stream with an error of type PROTOCOL_ERROR.

    Review on Reviewable

    opened by jdecuyper 18
  • Fixed to read out all data for buffering in BufferedSocket when Data Frame payload is quite large

    Fixed to read out all data for buffering in BufferedSocket when Data Frame payload is quite large

    Could you confirm whether accessing www.google.co.uk would occur as below?

    My environment is OS X Yosemite 10.10.1 (x86_64) and use MacPorts to install Python 3.4.2.

    (hyper)$ python
    Python 3.4.2 (default, Nov 23 2014, 23:10:23) 
    [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.54)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from hyper import HTTP20Connection
    >>> conn = HTTP20Connection('www.google.co.uk')
    >>> conn.request('GET', '/')
    1
    >>> response = conn.getresponse()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File ".../hyper/http20/connection.py", line 171, in getresponse
        return HTTP20Response(stream.getheaders(), stream)
      File ".../hyper/http20/stream.py", line 293, in getheaders
        self._recv_cb()
      File ".../hyper/http20/connection.py", line 541, in _recv_cb
        self._consume_single_frame()
      File ".../hyper/http20/connection.py", line 483, in _consume_single_frame
        frame, length = Frame.parse_frame_header(header)
      File ".../hyper/http20/frame.py", line 52, in parse_frame_header
        frame = FRAMES[type](stream_id)
    KeyError: 97
    

    The buffering issue in BufferedSocket causes this error. In my environment self._sck.recv_into(_buffer) read data only 1135 bytes in spite of _buffer size is 65535 bytes when target length (amt) is 16384 bytes. I'm not sure whether socket.recv() would ensure to read the buffer given length.

    $ man 2 recv
         ssize_t
         recv(int socket, void *buffer, size_t length, int flags);
    

    So, I changed to read data from socket until count == 0 (it means no data) or self._bytes_in_buffer == amt.

    opened by t2y 17
  • The orders of sending packages in Debug mode and Run mode are different.

    The orders of sending packages in Debug mode and Run mode are different.

    When I use the method request in hyper.http20.connection,it's finally leading to the block of method named endheaders. image When I was debugging the program, the order of packets is like the pic.Data packet is actually after WINDOW_UPDATE[1] packet. image But I just let them running without debug.It was running like the pic.The first data packet was sent before the WINDOW_UPDATE[1] packet.And it wasn't recognized to be HTTP2 protocol packet by Wireshark. image It's so wired!!Please help me!Thx!!

    opened by FrankHuy 0
  • Retain connection in HTTP/2 using hyper to avoid authentication for every request

    Retain connection in HTTP/2 using hyper to avoid authentication for every request

    Hello

    I have written, below script to test my code for HTTP/2. But with my current script., I need to send authorization with every request, i.e my connection get closed after every request. Is there any way, we can retain connetion with hyper.

    Below is my code:

    from hyper import HTTP20Connection
    
    import hyper
    import ssl
    import time
    
    header = {'Accept': 'application/xhtml+xml;v=2.0', 'Authorization': 'Basic RGVmYXVsdCBVc2VyOnJvYm90aWNz' }
    
    Accept_header = {'Accept': 'application/xhtml+xml;v=2.0'}
    
    context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
    context.options |= ssl.OP_NO_SSLv2
    context.options |= ssl.OP_NO_SSLv3
    
    with HTTP20Connection('localhost:443', force_proto='h2', ssl_context=context) as conn:
        conn.request('GET', '/', headers=header)
    
        resp = conn.get_response()
        
        print(resp.satus)
        
        conn.request('GET', '/ctrl')
    
        resp = conn.get_response()
        
        print(resp.status)
        print("Sleeping...")
        time.sleep(10)
    
    opened by vikramojha89 0
  • Client certificates?

    Client certificates?

    Hi,

    Is there any way to send client side certificates with hyper?

    This is what I am talking about: https://2.python-requests.org/en/master/user/advanced/#client-side-certificates

    opened by aqeeliz 0
  • basestring erroneously ignores unicode in Python2.7

    basestring erroneously ignores unicode in Python2.7

    Documenting it for those poor souls who are still stuck with hyper under Python2.7.

    Passing a Unicode object (not an "str") in Python2.7 to a hyper.tls.init_context as a cert argument raises an exception IOError: [Errno 21] Is a directory.

    This happens because "basestring" is erroneously set to (str, str) here:

    https://github.com/python-hyper/hyper/blob/18b629b8487169870235fe13387e2ae03c178b9f/hyper/tls.py#L123-L127

    Note that because of the assignment to the basestring on line 127, an attempt to dereference the object before will always raise NameError, because the interpreter will consider basestring as a local variable. The behavior is explained in the Python FAQ, and the solution is to declare basestring as global explicitly.

    opened by imankulov 0
Releases(v0.7.0)
  • v0.7.0(Aug 2, 2020)

    Major Changes

    • Added a ping method, allowing the user to use the HTTP/2 PING frame to check connection liveness before, instead of, or between issuing requests.

    Bugfixes

    • Don'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.
    Source code(tar.gz)
    Source code(zip)
  • v0.6.2(Aug 2, 2020)

  • v0.6.1(Aug 2, 2020)

    Bugfixes

    • Tolerate errors when attempting to send a RST_STREAM frame.
    • Ensure that calls to fileno() on the compatibility SSLSocket object actually work correctly. Thanks to @benlast!
    • Improved some problems with thread-safety in the Stream class. Thanks to @fredthomsen!
    • Allowed for systems to use hyper without the bundled cert file being present. Thanks to @JasonGowthorpe!
    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Aug 2, 2020)

    Major Changes

    • The HTTP20Connection object 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 Changes

    • Allow non-dictionary headers in request.
    • HTTP20Connection now has a force_proto keyword argument to allow the HTTP20Connection to ignore the NPN/ALPN result.
    • The --h2 CLI 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.

    Bugfixes

    • Overriding 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 the HTTP2-Settings header.
    • Improved handling of socket errors.
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Aug 2, 2020)

    Feature Enhancement

    • Pay attention to max frame length changes from remote peers. Thanks to @jdecuyper!

    Bugfixes

    • Prevent 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 any https-schemed URL.
    • Hyper CLI tool no longer attempts to decode bytes, instead writing them straight to the terminal.
    • Added new --h2 flag 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 of get_response.

    Software Updates

    • Updated hyperframe to version 2.1.0
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Jun 21, 2015)

    New Features

    • HTTP/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)
    • HTTP11Connection and HTTPConnection objects 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 Changes

    • The framing and HPACK layers were stripped out into their own libraries.

    Bugfixes

    • Properly verify hostnames when using PyOpenSSL.
    Source code(tar.gz)
    Source code(zip)
  • v0.3.1(Apr 3, 2015)

  • v0.3.0(Apr 3, 2015)

    New Features

    • HTTP/1.1 support! See the documentation for more. (Issue #75)
    • Implementation of a HTTPHeaderMap data structure that provides dictionary style lookups while retaining all the semantic information of HTTP headers.

    Major Changes

    • Various changes in the HTTP/2 APIs:
      • The getheader, getheaders, gettrailer, and gettrailers methods on the response object have been removed, replaced instead with simple .headers and .trailers properties that contain HTTPHeaderMap structures.
      • Headers and trailers are now bytestrings, rather than unicode strings.
      • An iter_chunked() method was added to response objects that allows iterating over data in units of individual data frames.
      • Changed the name of getresponse() to get_response(), because getresponse() was a terrible name forced upon me by httplib.
    Source code(tar.gz)
    Source code(zip)
  • v0.2.2(Apr 3, 2015)

  • v0.2.1(Mar 30, 2015)

    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.
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Feb 7, 2015)

  • v0.1.2(Feb 7, 2015)

    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.
    Source code(tar.gz)
    Source code(zip)
  • v0.1.1(Feb 6, 2015)

    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)
    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Aug 16, 2014)

    Changes

    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)

    Distributions

    V0.1.0 of hyper can be installed from pip. Alternatively, you can download any of the distributions from this release. Download a .tar.gz file if you're on a Unix OS, a .zip file on Windows, or the wheel (.whl) file on any OS. The .asc files are signed using my GPG key from Keybase.

    Source code(tar.gz)
    Source code(zip)
    hyper-0.1.0-py2.py3-none-any.whl(208.00 KB)
    hyper-0.1.0-py2.py3-none-any.whl.asc(280.85 KB)
    hyper-0.1.0.tar.gz(215.98 KB)
    hyper-0.1.0.tar.gz.asc(293.74 KB)
    hyper-0.1.0.zip(232.93 KB)
    hyper-0.1.0.zip.asc(305.95 KB)
  • v0.0.4(Mar 8, 2014)

    Changes

    • 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.

    Distributions

    V0.0.4 of hyper can be installed from pip. Alternatively, you can download any of the distributions from this release. Download a .tar.gz file if you're on a Unix OS, a .zip file on Windows, or the wheel (.whl) file on any OS. The .asc files are signed using my GPG key from Keybase.

    Source code(tar.gz)
    Source code(zip)
    hyper-0.0.4-py33-none-any.whl(193.58 KB)
    hyper-0.0.4-py33-none-any.whl.asc(261.39 KB)
    hyper-0.0.4.tar.gz(198.14 KB)
    hyper-0.0.4.tar.gz.asc(269.14 KB)
    hyper-0.0.4.zip(209.34 KB)
    hyper-0.0.4.zip.asc(281.29 KB)
  • v0.0.3(Feb 26, 2014)

    • Use bundled SSL certificates in addition to the OS ones, which have limited platform availability. (#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. (#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. (#14)
    Source code(tar.gz)
    Source code(zip)
  • v0.0.2(Feb 20, 2014)

    • 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)
    Source code(tar.gz)
    Source code(zip)
Owner
Hyper
HTTP for Python
Hyper
A next generation HTTP client for Python. 🦋

HTTPX - A next-generation HTTP client for Python. HTTPX is a fully featured HTTP client for Python 3, which provides sync and async APIs, and support

Encode 9.8k Jan 5, 2023
Python requests like API built on top of Twisted's HTTP client.

treq: High-level Twisted HTTP Client API treq is an HTTP library inspired by requests but written on top of Twisted's Agents. It provides a simple, hi

Twisted Matrix Labs 553 Dec 18, 2022
Python HTTP library with thread-safe connection pooling, file post support, user friendly, and more.

urllib3 is a powerful, user-friendly HTTP client for Python. Much of the Python ecosystem already uses urllib3 and you should too. urllib3 brings many

urllib3 3.2k Dec 29, 2022
Asynchronous HTTP client/server framework for asyncio and Python

Async http client/server framework Key Features Supports both client and server side of HTTP protocol. Supports both client and server Web-Sockets out

aio-libs 13.1k Jan 1, 2023
Python HTTP library with thread-safe connection pooling, file post support, user friendly, and more.

urllib3 is a powerful, user-friendly HTTP client for Python. Much of the Python ecosystem already uses urllib3 and you should too. urllib3 brings many

urllib3 3.2k Jan 2, 2023
Asynchronous Python HTTP Requests for Humans using Futures

Asynchronous Python HTTP Requests for Humans Small add-on for the python requests http library. Makes use of python 3.2's concurrent.futures or the ba

Ross McFarland 2k Dec 30, 2022
HTTP/2 for Python.

Hyper: HTTP/2 Client for Python This project is no longer maintained! Please use an alternative, such as HTTPX or others. We will not publish further

Hyper 1k Dec 23, 2022
HTTP request/response parser for python in C

http-parser HTTP request/response parser for Python compatible with Python 2.x (>=2.7), Python 3 and Pypy. If possible a C parser based on http-parser

Benoit Chesneau 334 Dec 24, 2022
🔄 🌐 Handle thousands of HTTP requests, disk writes, and other I/O-bound tasks simultaneously with Python's quintessential async libraries.

?? ?? Handle thousands of HTTP requests, disk writes, and other I/O-bound tasks simultaneously with Python's quintessential async libraries.

Hackers and Slackers 15 Dec 12, 2022
A Python obfuscator using HTTP Requests and Hastebin.

?? Jawbreaker ?? Jawbreaker is a Python obfuscator written in Python3, using double encoding in base16, base32, base64, HTTP requests and a Hastebin-l

Billy 50 Sep 28, 2022
Aiosonic - lightweight Python asyncio http client

aiosonic - lightweight Python asyncio http client Very fast, lightweight Python asyncio http client Here is some documentation. There is a performance

Johanderson Mogollon 93 Jan 6, 2023
Python package for caching HTTP response based on etag

Etag cache implementation for HTTP requests, to save request bandwidth for a non-modified response. Returns high-speed accessed dictionary data as cache.

Rakesh R 2 Apr 27, 2022
A simple, yet elegant HTTP library.

Requests Requests is a simple, yet elegant HTTP library. >>> import requests >>> r = requests.get('https://api.github.com/user', auth=('user', 'pass')

Python Software Foundation 48.8k Jan 5, 2023
As easy as /aitch-tee-tee-pie/ 🥧 Modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins & more. https://twitter.com/httpie

HTTPie: human-friendly CLI HTTP client for the API era HTTPie (pronounced aitch-tee-tee-pie) is a command-line HTTP client. Its goal is to make CLI in

HTTPie 25.4k Jan 1, 2023
A minimal HTTP client. ⚙️

HTTP Core Do one thing, and do it well. The HTTP Core package provides a minimal low-level HTTP client, which does one thing only. Sending HTTP reques

Encode 306 Dec 27, 2022
Fast HTTP parser

httptools is a Python binding for the nodejs HTTP parser. The package is available on PyPI: pip install httptools. APIs httptools contains two classes

magicstack 1.1k Jan 7, 2023
An interactive command-line HTTP and API testing client built on top of HTTPie featuring autocomplete, syntax highlighting, and more. https://twitter.com/httpie

HTTP Prompt HTTP Prompt is an interactive command-line HTTP client featuring autocomplete and syntax highlighting, built on HTTPie and prompt_toolkit.

HTTPie 8.6k Dec 31, 2022
HTTP Request Smuggling Detection Tool

HTTP Request Smuggling Detection Tool HTTP request smuggling is a high severity vulnerability which is a technique where an attacker smuggles an ambig

Anshuman Pattnaik 282 Jan 3, 2023
Probe and discover HTTP pathname using brute-force methodology and filtered by specific word or 2 words at once

pathprober Probe and discover HTTP pathname using brute-force methodology and filtered by specific word or 2 words at once. Purpose Brute-forcing webs

NFA 41 Jul 6, 2022