Python的HTTP/2客户端
项目描述
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 文件。
版本历史
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)
HTTP11Connection和HTTPConnection对象现在都是上下文管理器。
添加了对使用PyOpenSSL时的ALPN协商的支持。(问题#31)
添加了对用户提供的SSLContext对象的支持,感谢@jdecuyper!(问题#8)
更好地支持HTTP/2错误代码,感谢@jdecuyper!(问题#119)
更优雅地关闭连接,感谢@jdecuyper!(问题#15)
结构变更
将帧和HPACK层剥离到各自的库中。
错误修复
使用PyOpenSSL时正确验证主机名。
0.3.1 (2015-04-03)
错误修复
修复了阻塞的ImportError。(问题#114)
0.3.0 (2015-04-03)
新特性
支持HTTP/1.1!请参阅文档了解详细信息。(问题#75)
实现了一个提供字典式查找同时保留所有HTTP头语义信息的HTTPHeaderMap数据结构。
主要变更
HTTP/2 API的多个变更
从响应对象中移除了getheader、getheaders、gettrailer和gettrailers方法,而是用包含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的支持。
更新了捆绑的证书文件。
错误修复
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)
添加 HTTP20Response.gettrailer() 和 HTTP20Response.gettrailers(),支持下载和检查 HTTP 附件。 (部分讨论在 问题 #71。)
错误修复
0.0.4 (2014-03-08)
添加逻辑以管理插件对象,以管理连接和流的双向流控制窗口。
当无法将 Huffman 编码的字符串有效映射时,引发新的 HPACKDecodingError。
正确尊重 HPACK EOS 字符。
0.0.3 (2014-02-26)
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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 12c82eacd122a659673484c1ea0d34576430afbe5aa6b8f63fe37fcb06a2458c |
|
MD5 | 995ced94a28609905fb05962eab2796f |
|
BLAKE2b-256 | aff7f60d8032f331994f29ce2d79fb5d7fe1e3c1355cac0078c070cf4feb3b52 |
hyper-0.7.0-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 069514f54231fb7b5df2fb910a114663a83306d5296f588fffcb0a9be19407fc |
|
MD5 | 475426c4c01c7470fe3b86640a519d3c |
|
BLAKE2b-256 | 96c3e77072050a8d3a22255695d0cd7fde19bfe962364a6f6870ef47a9f9f66b |