client-util 0.3.0

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

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::*;
#[tokio::main]
async fn main() -> client_util::Result<()> {
    let mut client = build_https_client().expect("fail to build client");

    let request = RequestBuilder::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?

We have tower-cookie

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
hyper-client shortcut to create a hyper http client
hyper-client-rustls hyper-client with rustls