10个版本
0.3.0-alpha.4 | 2024年4月13日 |
---|---|
0.3.0-alpha.3 | 2024年4月12日 |
0.2.2 | 2023年10月10日 |
0.2.1 | 2023年5月8日 |
0.1.0 | 2022年11月21日 |
#134 in HTTP客户端
每月420次下载
60KB
1K SLoC
异步轻量级HTTP客户端(简称ALHC)
警告
这个库仍在开发中,且**非常不稳定**,请勿在生产环境中使用。
如果我们需要一个异步且轻量级的HTTP客户端,而不想使用像reqwest
、isahc
或surf
这样的大型库,怎么办?
ALHC是一个异步HTTP客户端库,使用系统库来减小二进制文件大小并提供异步请求功能。
HTTPS示例
use alhc::prelude::*;
use alhc::*;
use pollster::FutureExt;
fn main() -> DynResult {
let client = get_client_builder().build().unwrap();
let r = client
.post("https://httpbin.org/anything")?
.header("user-agent", "alhc/0.2.0")
.body_string("Hello World!".repeat(20))
.block_on()?
.recv_string()
.block_on()?;
println!("{r}");
Ok(())
}
我们的简单请求示例 https
在发布构建中可以小至182 KB,这比tinyget
的http
示例要小。如果我们使用rustc夜间功能加上build-std
和panic_immediate_abort
,它将不可思议地小至65 KB!
目前正在进行中,支持Windows(使用WinHTTP)和类Unix系统(包括macOS)(使用通过isahc
crate包装的系统libcurl)。将替换为更简单的curl
crate绑定)。
平台状态
名称 | 状态 | 注意 |
---|---|---|
Windows | 工作 | 可能不稳定(待优化) |
macOS | 工作 | 是isahc crate的简单包装 |
Linux | 工作 | 是isahc crate的简单包装 |
功能
async_t_boxed
:使用async-trait
代替async-t
,这需要1.75+版本的rustc,但无成本。默认是禁用的。serde
:可以提供发送/接收JSON数据的能力,而无需手动调用serde_json
。默认是禁用的。anyhow
:请使用Result
类型,来自anyhow
crate,而不是Result<T, Box<dyn std::error::Error>>
。默认为禁用。
Unix-like平台上的最小二进制大小指南
对于几乎在所有桌面版本上都内置了libcurl的Unix-like系统,如Linux或macOS,您必须安装所有curl crate需要的开发包,以动态链接这些库。例如,在Ubuntu上,您需要安装 libcurl4-openssl-dev
和 zlib1g-dev
以实现动态链接。否则,curl crate将从源代码构建并静态链接它们,这将对二进制大小产生严重影响。
编译二进制大小比较
注意:大小优化参数是:
cargo +nightly run --release -Z build-std=core,alloc,std,panic_abort -Z build-std-features=panic_immediate_abort --target [TARGET] --example [EXAMPLE]
和Cargo.toml
中的某些配置
名称 | Windows (x86_64) | Windows (i686) | Windows (aarch64) | macOS (x86_64) | macOS (aarch64) | Linux (x86_64) |
---|---|---|---|---|---|---|
示例 https |
468,992 | 402,944 | 296,960 | 4,078,936 | 4,395,400 | 18,051,064 |
示例 https 发布版本 |
181,248 | 162,816 | 200,192 | 729,304 | 719,192 | 850,704 |
示例 https 发布版本(大小优化) |
75,264 | 66,048 | 59,392 | 444,680 | 453,064 | 465,480 |
示例 parallel |
571,904 | 486,912 | 393,216 | 4,250,296 | 4,572,120 | 19,612,824 |
示例 parallel 发布版本 |
190,464 | 170,496 | 229,888 | 737,536 | 735,752 | 862,992 |
示例 parallel 发布版本(大小优化) |
80,896 | 71,680 | 66,560 | 452,912 | 453,112 | 469,576 |
示例 sequential |
472,064 | 405,504 | 302,080 | 4,069,368 | 4,373,352 | 18,048,624 |
示例 sequential 发布版本 |
182,784 | 164,864 | 203,264 | 729,296 | 719,176 | 850,704 |
示例 sequential 发布版本(大小优化) |
76,800 | 68,096 | 60,928 | 448,776 | 453,064 | 465,480 |
依赖项
~11–21MB
~341K SLoC