8 个版本 (4 个重大更新)

0.5.1 2024年4月13日
0.5.0 2024年3月17日
0.4.0 2023年9月5日
0.3.2 2023年9月5日
0.1.1 2021年7月10日

#1480 in 网络编程

Download history 174/week @ 2024-04-13 35/week @ 2024-04-20 21/week @ 2024-04-27 9/week @ 2024-05-04 5/week @ 2024-05-11 26/week @ 2024-05-18 9/week @ 2024-05-25 10/week @ 2024-06-01 8/week @ 2024-06-08 7/week @ 2024-06-15 6/week @ 2024-06-22 2/week @ 2024-06-29 30/week @ 2024-07-13 65/week @ 2024-07-20 41/week @ 2024-07-27

每月下载量:136
用于 4 个包(通过 async-acme

MIT 许可证

92KB
2.5K SLoC

Project Status: Active – The project has reached a stable, usable state and is being actively developed. Crates.io Released API docs MIT licensed

通用的异步 HTTP 请求创建。

它旨在作为各种 HTTP 客户端的薄包装,并处理 TLS、序列化和解析。

主要目标是允许二进制文件(包含一些使用 HTTP 客户端的库)指定应使用哪种实现

如果存在代理。如果没有指定,将自动检测 HTTP_PROXY

特性

您需要通过特性指定用于实际工作的包。

功能标志 含义
use_hyper 使用 hyper 进行 HTTP GitHub Workflow Status
use_async_h1 使用 async_h1 进行 HTTP GitHub Workflow Status
rustls 通过 rustls 添加对 HTTPS 的支持
代理 添加对 Socks5 和 HTTP 代理的支持
hyper_native_tls 使用 hyper 进行 HTTP,并通过 native_tls 进行 HTTPS GitHub Workflow Status
async_native_tls 使用 async_h1 进行 HTTP,并通过 native_tls 进行 HTTPS GitHub Workflow Status

如果没有指定任何内容,您将得到 未选择任何 HTTP 后端。如果您将此包用于库,请重新导出适当的功能。

动机

Rust 提供了不同的异步运行时,在高层上它们提供相同的功能:用于文件、套接字等的异步函数。

因此,如果您编写一个库并且需要一些基本功能(如 HTTP 客户端),您有时必须做出并非用户所期望的选择。例如:我基于 hyper 开发了一个 web服务器 并希望添加 ACME。我发现的一个 crate 完成了我需要的功能,但使用了 async-h1 和 async-std。虽然这可行,但它确实增加了二进制文件大小和我依赖的 crate 数量。

因此,我编写了这个。您可以指定要使用哪个后端。在 Web服务器的情况下,使用已经是依赖项的 tokio 而不是 async-std 可以减少 81 个 crate 并使二进制文件减小 350kB。

[profile.release]
lto = "fat"
codegen-units = 1

对于 HTTP 客户端:应该有一种方法为所有使用它的库添加代理。

计划

  1. 添加会话 - 使多次请求更高效
  2. 为会话添加 cookie jar
  3. 允许从服务器流式传输 Body
  4. 允许将 Body 流式传输到服务器

依赖项

~0.8–16MB
~207K SLoC