66个版本 (21个破坏性版本)
0.23.12 | 2024年8月4日 |
---|---|
0.23.10 | 2024年7月14日 |
0.21.3 | 2024年1月22日 |
0.20.2 | 2023年12月25日 |
0.1.12 | 2022年3月31日 |
#43 在 HTTP客户端
每月1,476次下载
用于 28 crates
90KB
2K SLoC
HttpClient
httpclient
是Rust中一个用户友好的http客户端。尽可能模仿 reqwest
API。为什么要构建一个新的http客户端?
httpclient::{Request, Response}
对象是serde序列化的,这启用了记录/回放功能。请参阅下面的示例以了解其实际应用。httpclient
提供了一个用于用户可扩展中间件的API。内置中间件包括重定向、重试、日志记录和记录/回放。httpclient
提供了一个内置的Error
类型,可以返回Http请求,其中包括状态码、头信息和响应体。httpclient
提供了一些便利的方法,这些方法是reqwest
所不支持的最重要是IntoFuture
实现,它等待请求和响应体,从而简化了即使在错误情况下也要返回请求体的场景。
Oauth2
对于Oauth2,请使用 Oauth2Flow
和来自 httpclient_oauth2
的 Oauth2
中间件。
关于Http 1.0的说明
http
最近升级到了1.0。然而, hyper_rustls
仍然依赖于 0.2.x
。我们正在等待 hyper_rustls
升级我们的依赖项。
#[tokio::main]
async fn main() {
let mut client = httpclient::Client::new()
// With this middleware, the script will only make the request once. After that, it replays from the filesystem
// and does not hit the remote server. The middleware has different modes to ignore recordings (to force refresh)
// and to prevent new requests (for running a test suite).
// The recordings are sanitized to hide secrets.
.with_middleware(httpclient::middleware::Recorder::new())
;
let res = client.get("https://www.jsonip.com/")
.header("secret", "foo")
.await
.unwrap();
let res = res.text().unwrap();
let res = client.get("https://www.jsonip.com/")
.header("secret", "foo")
.send()
.await
.unwrap();
// By using `send()`, we now can separately await the request body.
let res = res.text().await.unwrap();
}
路线图
- 在Recorder中隐藏秘密。请求必须尊重隐藏值进行哈希和Eq检查。
- 确保在wasm32-unknown-unknown上构建
- 在json中清理"sessid"
依赖项
~9–22MB
~371K SLoC