@@ -106,6 +106,7 @@ struct Config {
|
||||
cookie_store: Option<cookie::CookieStore>,
|
||||
trust_dns: bool,
|
||||
error: Option<crate::Error>,
|
||||
https_only: bool,
|
||||
}
|
||||
|
||||
impl Default for ClientBuilder {
|
||||
@@ -157,6 +158,7 @@ impl ClientBuilder {
|
||||
trust_dns: cfg!(feature = "trust-dns"),
|
||||
#[cfg(feature = "cookies")]
|
||||
cookie_store: None,
|
||||
https_only: false,
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -349,6 +351,7 @@ impl ClientBuilder {
|
||||
request_timeout: config.timeout,
|
||||
proxies,
|
||||
proxies_maybe_http_auth,
|
||||
https_only: config.https_only,
|
||||
}),
|
||||
})
|
||||
}
|
||||
@@ -917,6 +920,14 @@ impl ClientBuilder {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
/// Restrict the Client to be used with HTTPS only requests.
|
||||
///
|
||||
/// Defaults to false.
|
||||
pub fn https_only(mut self, enabled: bool) -> ClientBuilder {
|
||||
self.config.https_only = enabled;
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
type HyperClient = hyper::Client<Connector, super::body::ImplStream>;
|
||||
@@ -1040,6 +1051,11 @@ impl Client {
|
||||
return Pending::new_err(error::url_bad_scheme(url));
|
||||
}
|
||||
|
||||
// check if we're in https_only mode and check the scheme of the current URL
|
||||
if self.inner.https_only && url.scheme() != "https" {
|
||||
return Pending::new_err(error::url_bad_scheme(url));
|
||||
}
|
||||
|
||||
// insert default headers in the request headers
|
||||
// without overwriting already appended headers.
|
||||
for (key, value) in &self.inner.headers {
|
||||
@@ -1238,6 +1254,7 @@ struct ClientRef {
|
||||
request_timeout: Option<Duration>,
|
||||
proxies: Arc<Vec<Proxy>>,
|
||||
proxies_maybe_http_auth: bool,
|
||||
https_only: bool,
|
||||
}
|
||||
|
||||
impl ClientRef {
|
||||
|
||||
Reference in New Issue
Block a user