跳转到主要内容

Python的HTTP/2客户端

项目描述

这是一个临时发布版本,直到原始软件包以版本 < 0.7.0 发布。在那之后,将删除此发布。

https://raw.github.com/Lukasa/hyper/development/docs/source/images/hyper.png https://travis-ci.org/Lukasa/hyper.svg?branch=master

HTTP正在我们脚下改变。我们老朋友HTTP/1.1正在被全新的HTTP/2标准所补充。HTTP/2提供了许多好处:提高速度、降低带宽使用率、更好的连接管理等等。

hyper将为您的Python代码提供这些好处。如何?就像这样

from hypertemp import HTTPConnection

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

print(resp.read())

简单。

小心行事!

请小心:hyper处于非常早期的alpha阶段。您在使用它时肯定会遇到错误。此外,还有很多粗糙的边缘。话虽如此,请在您的应用程序中尝试它:我需要您的反馈来修复错误和磨平粗糙的边缘。

版本

hyper支持HTTP/2规范的最终草案:此外,它还支持HTTP/2规范的14、15和16个草案。它还支持HPACK规范的最终草案。

兼容性

hyper旨在作为http.client的替换品,具有类似的API。然而,hyper故意没有以与http.client相同的方式命名其类。这是因为大多数服务器目前都不支持HTTP/2:我不想您在需要http.client时意外使用hyper

文档

想要了解更多?关于 hyper 的文档可以在 Read the Docs 上找到。

贡献

hyper 欢迎任何人的贡献!与许多其他项目不同,我们乐于接受外观贡献和小的贡献,除了大型功能请求和变更。

在您贡献之前(无论是通过打开一个问题还是提交一个 pull request),请 阅读贡献指南

许可

hyper 在 MIT 许可下提供。更多详情,请参阅存储库中的 LICENSE 文件。

作者

hyper 由 Cory Benfield 维护,其他人也做出了贡献。有关贡献者的更多详情,请参阅 CONTRIBUTORS.rst

发行历史

dev

错误修复

  • 当最后一个数据块的长度等于 MAX_CHUNK 时,设置流结束标志。

v0.7.0 (2016-09-27)

主要变更

  • 添加了 ping 方法,允许用户在发出请求之前、之间或之后使用 HTTP/2 PING 帧来检查连接的活跃性。

错误修复

  • 不要在关闭的流上发送 WINDOWUPDATE 帧。

  • 清理流关闭时的未完成的流读取。

  • 确保在流关闭时无条件地重置连接状态,无论连接是否有打开的套接字对象。

0.6.2 (2016-06-13)

错误修复

  • 修复了上一个版本中犯的错误。

0.6.1 (2016-06-13)

错误修复

  • 尝试发送 RST_STREAM 帧时容忍错误。

  • 确保在兼容 SSLSocket 对象上调用 fileno() 实际上工作正确。感谢 @benlast!

  • 改进了 Stream 类中的一些线程安全问题。感谢 @fredthomsen!

  • 允许系统在未提供捆绑证书文件的情况下使用 hyper。感谢 @JasonGowthorpe!

0.6.0 (2016-05-06)

主要变更

  • 只要在所有方法调用中使用流 ID,HTTP20Connection 对象现在是线程安全的。

  • 完全替换了 HTTP/2 状态机逻辑以使用 hyper-h2。这将极大地改变库在许多情况下的行为,大部分是更好的。然而,这也可能引入新的错误,所以请谨慎。

API 变更

  • 允许在 request 中使用非字典标题。

  • HTTP20Connection 现在有 force_proto 关键字参数,允许 HTTP20Connection 忽略 NPN/ALPN 结果。

  • 现在,CLI 标志 --h2 忽略了 NPN/ALPN 协商的结果,当访问 HTTPS URL 时。

  • 添加了对 HTTPS 客户端证书的支持。

  • 有关流被重置的通知现在被延迟,直到相关流下一次被访问时才触发,而不是立即触发。

错误修复

  • 不再导致包含特殊标题的非法标题块。

  • 大幅提高了 IPv6 支持。

  • 修复了在 Python 2.7 上将 Unicode 主体转换为字节字符串的问题。

  • 允许从 CLI 覆盖 HTTP/2 伪标题。

  • 修复了不正确生成 HTTP2-Settings 标题的问题。

  • 改进了对套接字错误的处理。

0.5.0 (2015-10-11)

功能增强

  • 注意来自远程对等方的最大帧长度更改。感谢 @jdecuyper!

错误修复

  • 防止 hyper 发出过大的帧。感谢 @jdecuyper!

  • 防止 hyper 在完成消耗流时发出 RST_STREAM 帧。

  • 防止 hyper 发出大量的 RST_STREAM 帧。

  • Hyper CLI 工具现在正确使用 TLS 任何 https-schemed URL。

  • Hyper CLI 工具不再尝试解码字节,而是直接将它们写入终端。

  • 向Hyper CLI工具添加了新的--h2标志,允许直接使用明文HTTP/2,而不是尝试从HTTP/1.1升级。

  • get_response的抽象版本中允许参数和关键字参数。

软件更新

  • 更新hyperframe到版本2.1.0

0.4.0 (2015-06-21)

新功能

  • HTTP/1.1和HTTP/2抽象层。不需要指定要使用哪个版本,只需自动获取服务器支持的最佳版本即可!

  • 支持将明文HTTP/1.1升级为明文HTTP/2,感谢@fredthomsen! (问题#28)

  • HTTP11ConnectionHTTPConnection对象现在都是上下文管理器。

  • 当使用PyOpenSSL时,增加了对ALPN协商的支持。 (问题#31)

  • 增加了对用户提供的SSLContext对象的支持,感谢@jdecuyper! (问题#8)

  • 更好地支持HTTP/2错误代码,感谢@jdecuyper! (问题#119)

  • 更优雅地关闭连接,感谢@jdecuyper! (问题#15)

结构变更

  • 将帧和HPACK层提取出来形成独立的库。

错误修复

  • 当使用PyOpenSSL时,正确验证主机名。

0.3.1 (2015-04-03)

错误修复

0.3.0 (2015-04-03)

新功能

  • 支持HTTP/1.1!更多信息请参阅文档。 (问题#75)

  • 实现了一个HTTPHeaderMap数据结构,它提供了字典风格的查找,同时保留了所有HTTP头的语义信息。

主要变更

  • HTTP/2 API的多个更改

    • 从响应对象上移除了getheadergetheadersgettrailergettrailers方法,取而代之的是简单的.headers.trailers属性,它们包含HTTPHeaderMap结构。

    • 头和尾现在是由字节组成的字符串,而不是Unicode字符串。

    • 为响应对象添加了iter_chunked()方法,允许以单个数据帧为单位迭代数据。

    • getresponse()的名称更改为get_response(),因为getresponse()是httplib强迫我使用的糟糕名称。

0.2.2 (2015-04-03)

错误修复

  • Hyper现在正确处理了“从未索引”的头字段。 (问题#110)

0.2.1 (2015-03-29)

新功能

  • 现在有一个名为hyper的命令行客户端,它支持从命令行直接发出HTTP/2请求。

主要变更

  • 支持HTTP/2和HPACK的最终草案。更新以提供“h2”ALPN令牌。

小更改

  • 我们不仅移除了连接头,还移除了它所引用的所有头。

0.2.0 (2015-02-07)

主要变更

  • 现在完全支持Python 2.7.9。

0.1.2 (2015-02-07)

小更改

  • 如果提供给我们,我们现在会移除Connection头,因为HTTP/2中该头无效。

错误修复

  • 为HTTPie添加了绕过方法,以便使我们的响应看起来更像urllib3响应。

0.1.1 (2015-02-06)

小更改

  • 支持HTTP/2草案15和16。不放弃对草案14的支持。

  • 更新了捆绑的证书文件。

错误修复

  • 修复了收到PING帧时引发AttributeError的问题,感谢@t2y。 (问题#79)

  • 修复了由于缓冲套接字实现而导致大帧被错误截断的bug,感谢@t2y。 (问题#80)

0.1.0 (2014-08-16)

回归和已知问题

  • 由于 Python 3.3 的 ssl 模块缺少功能,Python 3.3 的支持已被临时取消。PyOpenSSL 已被确定为替代方案,但在 NPN 支持合并之前无法使用。当 PyOpenSSL 适合的版本发布时,Python 3.3 的支持将重新添加。

  • 从技术上讲,此版本还包括对 PyPy 和 Python 2.7 的支持。该支持也受 PyOpenSSL 适合版本的限制。

有关这些回归的更多信息,请参阅 问题 #37

主要变更

  • 支持 HPACK 草案 9。

  • 支持 HTTP/2 草案 14。

  • 支持服务器推送,感谢 @alekstorm。(问题 #40)

  • 使用缓冲套接字以避免不必要的系统调用。(问题 #56)

  • 如果存在 nghttp2,则使用其 HPACK 编码器以提高速度和压缩效率。(问题 #60)

  • 添加 HTTP20Response.gettrailer()HTTP20Response.gettrailers(),支持下载和检查 HTTP 尾部。 (部分讨论在 问题 #71 中。)

错误修复

  • HTTP20Response 对象是上下文管理器。(问题 #24)

  • 可插拔窗口管理器现在可以正确地了解文档大小。(问题 #26)

  • 如果以与发送顺序不同的顺序读取,则不再会损坏标题块。(问题 #39)

  • 默认窗口管理器现在在发送 WINDOWUPDATE 帧方面更聪明。(问题 #41问题 #52)

  • 修正了反转的窗口大小。(问题 #27)

  • 正确回复 PING 帧。(问题 #48)

  • 使轮子通用,适合纯 Python 包。(问题 #46)

  • HPACK 编码器正确地编码了包含重复标题的标题集。(问题 #50)

0.0.4 (2014-03-08)

  • 添加逻辑以管理可插拔对象用于连接和流的双向流控制窗口。

  • 当我们无法将 Huffman 编码的字符串有效映射时,引发新的 HPACKDecodingError

  • 正确尊重 HPACK EOS 字符。

0.0.3 (2014-02-26)

  • 除了操作系统提供的证书外,还使用打包的 SSL 证书,这些证书的平台可用性有限。(问题 #9)

  • 当它们关闭时,连接对象重置到其基本状态,使它们可重用。请注意,如果在使用时抛出异常,它们可能无法重用:在这种情况下,您必须打开新的连接。

  • 连接对象现在是上下文管理器。(问题 #13)

  • HTTP20Adapter 正确重用连接。

  • 停止发送带有零大小窗口增加的 WINDOWUPDATE 帧。

  • 提供优雅地关闭流的基礎功能。

  • 已耗尽流现在被销毁。(问题 #14)

0.0.2 (2014-02-20)

  • 实现了日志记录。(问题 #12)

  • 停止 HTTP/2.0 特殊标题出现在响应标题中。(问题 #16)

  • HTTP20Connection 对象现在是上下文管理器。(问题 #13)

  • 响应体自动解压缩。(问题 #20)

  • 提供 requests 传输适配器。(问题 #19)

  • 修复构建状态指示器。 (问题 #22)

0.0.1 (2014-02-11)

  • 初始发布

  • 支持 HTTP/2.0 草案 09。

  • 支持 HPACK 草案 05。

  • 支持 HTTP/2.0 流量控制。

  • 验证 TLS 证书。

  • 支持流式上传。

  • 支持流式下载。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

hypertemp-0.8.0.tar.gz (586.0 kB 查看哈希值)

上传时间 源代码

构建分发

hypertemp-0.8.0-py2.py3-none-any.whl (417.9 kB 查看哈希值)

上传时间 Python 2 Python 3

由支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面