Help you to build requests and handle responses by several extension trait!
cargo add client-util
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(())
}
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.
Theoretically, you can add any feature to any client by using tower
.
You can find those features in tower-http
crate as tower layers.
We have tower-cookie
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 |