1个版本 (0个不稳定版本)

2.0.0-opendal.12022年8月12日

#317 in HTTP客户端

MIT许可证

370KB
6K SLoC

Isahc

向Isahc(发音类似于 Isaac)问好,这是一个实用且有趣的HTTP客户端。

以前被称为 chttp

Crates.io Documentation License Minimum supported Rust version Crates.io downloads Maintenance Build codecov

主要特性

  • 完全支持HTTP/1.1和HTTP/2。
  • 可配置的请求超时、重定向策略、Unix套接字以及更多设置。
  • 提供了一个便于使用的同步API,以及一个支持async/await的运行时无关异步API。
  • 核心完全异步,支持请求和响应体的增量读写以及连接复用。
  • 会话和cookie持久化。
  • 自动取消请求(在对象释放时)。
  • 使用http包作为请求和响应的接口。

什么是Isahc?

Isahc代表的是 Incredible Streaming Asynchronous HTTP Client(惊人的流式同步HTTP客户端),正如其名,它是Rust语言的一个异步HTTP客户端。它内部使用libcurl作为HTTP引擎,并在其上提供了一个易于使用的API,该API与Rust的语法集成。

不,是Isahc?

哦,你是说那只狗Isahc!它是一只可爱的小西伯利亚雪橇犬,每天喜欢和web服务器玩接球,并且有一条非常卷曲的尾巴。它和项目同名,并作为项目的吉祥物。

如果你喜欢,你可以整天摸它,它不介意。不过,它更希望你能以符合标准的方式摸它!

文档

请查看文档以了解Isahc能做什么以及如何使用它。为了帮助你入门,这里有一个非常简单、完整的示例,它会输出https://example.org的响应体。

use isahc::prelude::*;

fn main() -> Result<(), isahc::Error> {
    // Send a GET request and wait for the response headers.
    // Must be `mut` so we can read the response body.
    let mut response = isahc::get("https://example.org")?;

    // Print some basic info about the response to standard output.
    println!("Status: {}", response.status());
    println!("Headers: {:#?}", response.headers());

    // Read the response body as text into a string and print it.
    print!("{}", response.text()?);

    Ok(())
}

点击这里查看最新版本的文档。您还可以点击这里查看最新未发布版本的构建文档。

获取帮助

需要一些与Isahc相关的帮助吗?在我们的讨论页面上提问,我们很乐意尝试回答您的问题!

安装

通过Cargo安装,将以下内容添加到您的Cargo.toml文件中

[dependencies]
isahc = "1.7"

最低支持的Rust版本

Isahc支持的最低Rust版本(或MSRV)为稳定版Rust 1.46或更高版本,这意味着我们只能保证如果您使用至少1.46版本的rustc,Isahc将能够编译。它可能可以用旧版本编译,但这一点可能会随时改变。

此版本已在CI中明确测试,并且可能仅在新的小版本中升级。任何对支持最低版本的变化都将在发布说明中说明。

项目目标

  • 创建一个既易于初学者使用又适用于高级应用的舒适和创新型的HTTP客户端API。
  • 提供对libcurl的高级封装。
  • 保持轻量级的依赖关系树和小的二进制文件大小。
  • 提供可选编译的额外客户端功能。

非目标

  • 对HTTP之外协议的支持。
  • 除了libcurl之外的替代引擎。其他项目更适合这一目标。

为什么使用Isahc而不是X?

Isahc提供了一个易于使用、灵活且符合Rust风格的API,使得发送HTTP请求变得轻松。Isahc的目标是使简单的方法不仅易于使用,而且对于常见的用例也能提供出色的性能和正确性。

Isahc在底层使用libcurl来处理HTTP协议和网络。使用curl作为HTTP客户端的引擎是一个很好的选择,原因如下:

  • 它是一个稳定、积极开发且非常流行的库。
  • 它支持多种平台。
  • HTTP协议在不同的服务器上有许多意外的陷阱,而curl已经存在很长时间,足以处理许多这些问题。
  • 它经过良好优化,并能够实现异步请求。

通过curl crate提供了对libcurl的安全Rust绑定,您可以使用它来直接使用curl。Isahc通过提供更简单、更符合Rust风格的API,并完成将强大的multi接口转换为基于futures的API的工作,在vanilla curl之上提供了很多价值。

何时不使用Isahc?

并非每个库都适合每个用例。虽然Isahc努力成为一个功能齐全、用途广泛的HTTP客户端,应该适用于许多项目,但还有一些场景不适合Isahc。

  • 小型二进制文件:如果您正在创建一个将小型二进制文件大小作为关键优先级的应用程序,您可能会发现Isahc对您来说太大。尽管Isahc的依赖项被精心管理,并且可以禁用一些功能,但Isahc的核心功能集包括异步等具有一些文件大小开销的功能。您可能会发现ureq更适合。
  • WebAssembly支持:如果您项目需要能够编译为WebAssembly,那么Isahc可能不适合您。相反,您可能会喜欢支持多个后端(如Surf)的HTTP客户端。

赞助商

特别感谢支持我的开源工作的赞助商!

许可证

本项目的源代码和文档均采用MIT许可证。有关详细信息,请参阅LICENSE文件。

Isahc标志和相关资产采用Creative Commons Attribution 4.0 International License。有关详细信息,请参阅LICENSE-CC-BY

依赖项

约10-25MB
约451K SLoC