#http-client #http-middleware #hyper-client #hyper-http #tower-middleware #http-request #tower

client-util

Help you to build requests and handle responses by several extension trait!

2 releases

0.1.1 Jul 2, 2024
0.1.0 Jun 30, 2024

#1128 in Network programming

Apache-2.0

80KB
2K SLoC

client-util

Crates.io Version Release status docs.rs

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–16MB
~246K SLoC