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客户端
每月196次下载
用于 flawless-slack
30KB
390 行
flawless-http
https://flawless.dev 的HTTP客户端。
这个库从
ureq
中汲取了许多灵感。我非常感谢algesten
、jsha
和其他贡献者在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