3个版本

0.0.3 2020年8月31日
0.0.2 2020年8月26日
0.0.1 2020年8月22日

HTTP客户端 中排名第309

每月下载量40

MIT许可证

70KB
1K SLoC

Curio - A Blazing Fast HTTP Client

Rust Discord codecov Crates.io (latest) Crates.io (recent) GitHub issues GitHub closed issues

关于

什么是Curio?

Curio是一个由Mozilla用Rust编程语言编写的轻量级HTTP客户端。我创建它是为了学习HTTP的细节和怪癖,毕竟对我来说,定义互联网的标准是很有趣的。它最重要的目标是性能,其次是易用性。如果你精通Rust,并且知道如何帮助我提高Curio的性能,请不要犹豫,打开一个标记为优化标签的问题。如果你有一个你认为非常适合Curio并可能对其他人有用的功能,请打开一个带有功能标签的问题。

尽管Curio已经可以使用了,但我总是希望改进它。如果你有任何建议,请打开一个 问题

为什么我应该使用Curio而不是其他HTTP客户端?

Curio是对处理HTTP客户端的一种新看法,旨在提供一个跨平台、跨语言的库,几乎可以在任何地方使用。

Curio支持X吗?

Curio支持大多数最常见的HTTP方法

  • GET
  • POST
  • DELETE

Curio还支持以下HTTP方法

  • OPTIONS
  • HEAD

它还支持CORS请求限制。它向请求的资源发送一个预检请求,以确保请求可以继续。

这个库还支持自动HTTPS升级。

在未来版本中,所有这些功能都将可配置,例如,您可以为该请求禁用CORS限制,或者可以强制客户端使用TCP而不是TLS。


文档

您可以在此处查看最新的文档,但请注意,这可能与docs.rs上的文档不一致,如果您不是从该存储库导入,请使用那些文档。

示例

简单的GET请求

some-domain.tld/path/to/resource的简单GET请求可能看起来像这样

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let response = Request::get("https://some-domain.tld/path/to/resource")
        .send()?;

    println!("{:#?}", response);
    Ok(())
}

POST纯文本内容

一个简单的POST请求,它正在发布纯文本内容,看起来像这样

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut post_body = "This is some example content to POST";

    // convert the string into a format accepted by the `set_body` method.
    let post_data = PostData::from_str(post_body);

    // below, set the destination of the post body using the `post` method,
    // set the body using the `set_body` method,
    // and send the request by using the `send` method
    let response = Request::post("https://some-domain.tld/documents")
        .set_body(&post_data)
        .send()?;

    println!("{:#?}", response);
    Ok(())
}

里程碑

2020年8月26日星期三 - 首个完全功能的GET请求处理器: 提交496ae5f

2020年8月29日星期六 - Curio 0.0.3(为0.1.0版本做准备)已完成,并开始发布准备工作。

基准测试

方法 总运行次数 平均时间 最高时间 最低时间 标准差 总时间 与Curio比较
GET Reqwest 10,000 7.475毫秒 62.460毫秒 6.221毫秒 1.966毫秒 12分钟27秒 慢1019%
GET Hyper 10,000 1.108毫秒 11.78毫秒 0.800毫秒 0.425毫秒 1分钟50秒 慢66%
GET Curio 10,000 0.668毫秒 9.772毫秒 0.523毫秒 0.147毫秒 1分钟6秒 不适用
POST Reqwest 10,000 1.348毫秒 22.712毫秒 1.064毫秒 0.511毫秒 2分钟14秒 慢99%
POST Hyper 10,000 1.138毫秒 10.660毫秒 0.839毫秒 0.369毫秒 1分钟53秒 慢68%
POST Curio 10,000 0.676毫秒 2.613毫秒 0.534毫秒 0.097毫秒 1分钟7秒 不适用
DELETE Reqwest 10,000 1.360毫秒 21.140毫秒 0.988毫秒 0.492毫秒 2分钟16秒 慢123%
DELETE Hyper 10,000 1.382毫秒 29.921毫秒 0.842毫秒 0.838毫秒 2分钟18秒 慢126%
DELETE Curio 10,000 0.611毫秒 13.118毫秒 0.455毫秒 0.276毫秒 1分钟1秒 不适用

依赖项

~9.5MB
~257K SLoC