Python的HTTP/2客户端
项目描述
此项目不再维护!
请使用替代品,例如HTTPX或其他。
我们不会发布关于hyper的进一步更新。
不会解决潜在的安全问题。
再见了,感谢所有的鱼!
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 文件。
发行历史
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)
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)
新特性
现在有一个支持从命令行直接发送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的支持。
更新了捆绑的证书文件。
错误修复
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-joinup-0.8.0-2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 734e00fb0cb48c23ea90b9b6937043432d05ce2ef9ce5f89cee48aff2d084704 |
|
MD5 | e8076dbb85eb851f918ece000e281bb0 |
|
BLAKE2b-256 | 2ad0d9f7fc1908afac9c9cb89991095c43c4035d588a4b49261f61692ba0089b |