Read HTTP proxy from env (#6765)

lichuan6 created

This PR will use http proxy from env for downloading files.

Change summary

crates/util/src/http.rs |  2 ++
crates/util/src/util.rs | 22 ++++++++++++++++++++++
2 files changed, 24 insertions(+)

Detailed changes

crates/util/src/http.rs 🔗

@@ -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(),
     )

crates/util/src/util.rs 🔗

@@ -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 {