2 releases
| 0.1.1 | Jul 2, 2024 |
|---|---|
| 0.1.0 | Jun 30, 2024 |
#1138 in Network programming
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