跳转到主要内容

Python的HTTP/2客户端

项目描述

此项目不再维护!

请使用替代品,例如HTTPX或其他。

我们不会发布关于hyper的进一步更新。

不会解决潜在的安全问题。


再见了,感谢所有的鱼!


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

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

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

from hyper import HTTPConnection

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

print(resp.read())

简单。

买者注意!

请务必注意:hyper处于非常早期的预览版。您在使用时会遇到错误。此外,还有很多粗糙的边缘。话虽如此,请在您的应用程序中尝试它:我需要您的反馈来修复错误并磨平粗糙的边缘。

版本

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

兼容性

hyper旨在作为http.client的替代品,具有类似的API。然而,hyper故意没有像http.client那样命名其类。这是因为现在大多数服务器都不支持HTTP/2:我不想你意外地使用了hyper而不是http.client

文档

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

贡献

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

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

许可

hyper 在 MIT 许可证下提供。有关更多详细信息,请参阅仓库中的 LICENSE 文件。

作者

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

发行历史

dev

错误修复

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

v0.8.0 (2022-06-09)

  • 上传到 pypi 开发分支

  • 添加 Apple 推送补丁

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 客户端证书的支持。

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

错误修复

  • 不再因为覆盖 HTTP/2 特殊标题而导致包含特殊标题的无效标题块。

  • 大大改进了 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)

  • 实现了一个提供字典样式查找同时保留所有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)

新特性

  • 现在有一个支持从命令行直接发送HTTP/2请求的命令行客户端hyper

主要更改

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

小更改

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

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)

  • 修复了由缓冲套接字实现不正确截断大帧的问题,感谢@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正确重用连接。

  • 停止发送具有零大小的窗口增量窗口更新帧。

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

  • 已耗尽的流现在被丢弃。(问题#14

0.0.2 (2014-02-20)

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

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

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

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

  • 提供请求传输适配器。(问题#19

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

0.0.1 (2014-02-11)

  • 初始发布

  • 支持HTTP/2.0草案09。

  • 支持HPACK草案05。

  • 支持HTTP/2.0流量控制。

  • 验证TLS证书。

  • 支持流式上传。

  • 支持流式下载。

项目详情


下载文件

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

源分布

hyper-joinup-0.8.0-2.tar.gz (272.2 kB 查看哈希值)

上传时间

由以下提供支持