client_util/client/
hyper.rs

1use hyper_util::{
2    client::legacy::{connect::HttpConnector, Client as HyperClient},
3    rt::TokioExecutor,
4};
5
6/// TLS support
7#[cfg(feature = "client-hyper-rustls")]
8#[cfg_attr(docsrs, doc(cfg(feature = "client-hyper-rustls")))]
9mod tls {
10    use hyper_util::{
11        client::legacy::{connect::HttpConnector, Client as HyperClient},
12        rt::TokioExecutor,
13    };
14    use rustls::ClientConfig;
15
16    pub type HyperHttpsClient<B> = HyperClient<HttpsConnector<HttpConnector>, B>;
17
18    use hyper_rustls::{ConfigBuilderExt, HttpsConnector};
19    pub fn build_https_client<B>() -> std::io::Result<HyperHttpsClient<B>>
20    where
21        B: http_body::Body + Send,
22        B::Data: Send,
23    {
24        let client = HyperClient::builder(TokioExecutor::default()).build(
25            HttpsConnector::<HttpConnector>::builder()
26                .with_tls_config(
27                    ClientConfig::builder()
28                        .with_native_roots()?
29                        .with_no_client_auth(),
30                )
31                .https_or_http()
32                .enable_all_versions()
33                .build(),
34        );
35        Ok(client)
36    }
37}
38
39#[cfg(feature = "client-hyper-rustls")]
40#[cfg_attr(docsrs, doc(cfg(feature = "client-hyper-rustls")))]
41pub use tls::*;
42
43type HyperHttpClient<B> = HyperClient<HttpConnector, B>;
44
45pub fn build_http_client<B>() -> HyperHttpClient<B>
46where
47    B: http_body::Body + Send,
48    B::Data: Send,
49{
50    HyperClient::builder(TokioExecutor::default()).build(HttpConnector::new())
51}