2 releases
0.1.1 | Jul 2, 2024 |
---|---|
0.1.0 | Jun 30, 2024 |
#1339 in Asynchronous
80KB
2K
SLoC
client-util
Help you to build requests and handle responses by several extension trait!
Usage
cargo add client-util
Make it easier to use hyper http client
use client_util::prelude::{RequestBuilderExt, RequestExt, ResponseExt, hyper_tls_client};
#[tokio::main]
async fn main() -> client_util::Result<()> {
let mut client = hyper_tls_client();
let request = http::Request::get("https://httpbin.org/json")
.version(http::Version::HTTP_11)
.json("hello client-util")?;
let (parts, response) = request
.send(&mut client)
.await?
.json::<serde_json::Value>()
.await?
.into_parts();
println!("{:?}", parts);
println!("{:?}", response);
Ok(())
}
Customize your own client
In RequestExt
trait, we send the request by a tower service, so you can add any middle layer on the top of the existed client.
What about...
Theoretically, you can add any feature to any client by using tower
.
What about trace, metrics, following redirect and more features?
You can find those features in tower-http
crate as tower layers.
What about cookies?
Implement a tower layer to manage cookies is a good idea, and we may implement in another crate in the future.
Feature Flags
flag | description |
---|---|
json | json body |
form | form body |
multipart | multipart form body |
query | serialize into and append url's query |
auth | method to append auth header |
decompression-deflate | deflate decompression, need tokio runtime |
decompression-gzip | gzip decompression, need tokio runtime |
decompression-br | br decompression, need tokio runtime |
decompression-zstd | zstd decompression, need tokio runtime |
decompression-all | all decompression support upon |
hyper-client | shortcut to create a hyper http client |
hyper-client-rustls | hyper-client with rustls |
rt-tokio | run with tokio runtime, which allows you use tower-http |
Dependencies
~2–15MB
~243K SLoC