#http-request #flawless #request-body #workflow #ureq #dev

flawless-http

https://flawless.dev 的HTTP客户端

5个版本

1.0.0-alpha…2024年2月26日
1.0.0-alpha…2024年2月23日
1.0.0-alpha…2024年2月22日

#167 in HTTP客户端

Download history 6/week @ 2024-04-06 1/week @ 2024-05-18 1/week @ 2024-06-01 1/week @ 2024-06-08

每月196次下载
用于 flawless-slack

BSD-2-Clause-Patent

30KB
390

flawless-http

docs.rs docs crates.io version

https://flawless.dev 的HTTP客户端。

这个库从 ureq 中汲取了许多灵感。我非常感谢 algestenjsha 和其他贡献者在 ureq 上的所有工作。 ❤️

快速入门

一个简单的GET请求看起来像这样。

use flawless::workflow;
use flawless_http::get;

#[workflow("fetch")]
fn fetch() {
    let request = get("https://example.com").set_header("Accept", "application/json");
    let response = request.send().unwrap();
    log::info!("{}", String::from_utf8(response.body()).unwrap());
}

正文

请求可以包含正文,但根据正文类型,可能需要设置额外的请求头。如果用户已手动设置头,则不会覆盖。

文本参数

如果将 String&str 类型传递给 body,则将设置 "Content-Length" 头为字符串的字节长度。

use flawless_http::post;

let response = post("https://httpbin.org/post")
                .body("Hello world!")
                .send();
assert!(response.is_ok());
表单参数

如果传递了一个字符串元组的切片(&[(&str, &str)]),则 body 将假设正在提交表单并将其URL编码。它将设置头 "Content-Type""application/x-www-form-urlencoded",并将 "Content-Length" 设置为编码内容的尺寸。

use flawless_http::post;

let response = post("https://httpbin.org/post")
                .body([
                  ("Hello", "world!"),
                  ("second", "argument"),
                ].as_ref())
                .send();
assert!(response.is_ok());
JSON参数

在类型为 serde_json::Value 的情况下,body 将假设内容为 JSON 类型,并将头信息 "Content-Type" 设置为 "application/json"。它还将 "Content-Length" 设置为序列化 JSON 的大小。

use flawless_http::post;
use serde_json::json;

let response = post("https://httpbin.org/post")
                .body(json!({
                    "Hello": "world!",
                    "second": "argument",
                }))
                .send();
assert!(response.is_ok());

依赖项

~5–14MB
~180K SLoC