Change summary
crates/util/src/http.rs | 2 ++
crates/util/src/util.rs | 22 ++++++++++++++++++++++
2 files changed, 24 insertions(+)
Detailed changes
@@ -1,3 +1,4 @@
+use crate::http_proxy_from_env;
pub use anyhow::{anyhow, Result};
use futures::future::BoxFuture;
use isahc::config::{Configurable, RedirectPolicy};
@@ -95,6 +96,7 @@ pub fn client() -> Arc<dyn HttpClient> {
isahc::HttpClient::builder()
.connect_timeout(Duration::from_secs(5))
.low_speed_timeout(100, Duration::from_secs(5))
+ .proxy(http_proxy_from_env())
.build()
.unwrap(),
)
@@ -44,6 +44,28 @@ pub fn truncate(s: &str, max_chars: usize) -> &str {
}
}
+pub fn http_proxy_from_env() -> Option<isahc::http::Uri> {
+ macro_rules! try_env {
+ ($($env:literal),+) => {
+ $(
+ if let Ok(env) = std::env::var($env) {
+ return env.parse::<isahc::http::Uri>().ok();
+ }
+ )+
+ };
+ }
+
+ try_env!(
+ "ALL_PROXY",
+ "all_proxy",
+ "HTTPS_PROXY",
+ "https_proxy",
+ "HTTP_PROXY",
+ "http_proxy"
+ );
+ None
+}
+
/// Removes characters from the end of the string if its length is greater than `max_chars` and
/// appends "..." to the string. Returns string unchanged if its length is smaller than max_chars.
pub fn truncate_and_trailoff(s: &str, max_chars: usize) -> String {