跳转到主要内容

Python的HTTP/2客户端

项目描述

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

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

hyper将这些好处带给您的Python代码。如何?就像这样

from hyper import HTTPConnection

conn = HTTPConnection('http2bin.org:443')
conn.request('GET', '/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 欢迎任何人的贡献!与其他许多项目不同,我们乐于接受外观贡献和小型贡献,除了大型功能请求和变更。

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

许可证

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

作者

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

版本历史

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 忽略了 HTTPS URL 的 NPN/ALPN 协商结果。

  • 添加了对 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 方案的 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)

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

主要变更

  • HTTP/2 API的多个变更

    • 从响应对象中移除了getheadergetheadersgettrailergettrailers方法,而是用包含HTTPHeaderMap结构的简单.headers.trailers属性代替。

    • 头和尾迹现在是字节字符串,而不是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)

小改动

  • 如果我们收到连接头,现在会将其移除,因为在HTTP/2中该头无效。

错误修复

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

0.1.1 (2015-02-06)

小改动

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

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

错误修复

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

  • 感谢@t2y,修复了由于缓冲套接字实现而可能导致的大帧被错误截断的bug。(问题#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)

0.0.1 (2014-02-11)

  • 初始发布

  • 支持 HTTP/2.0 草案 09。

  • 支持 HPACK 草案 05。

  • 支持 HTTP/2.0 流控制。

  • 验证 TLS 证书。

  • 支持流式上传。

  • 支持流式下载。

项目详情


下载文件

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

源分布

hyper-0.7.0.tar.gz (631.9 kB 查看哈希值)

上传时间

构建分布

hyper-0.7.0-py2.py3-none-any.whl (269.8 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下机构支持