diff --git a/backend/src/main/java/io/metersphere/commons/utils/EnvProxySelector.java b/backend/src/main/java/io/metersphere/commons/utils/EnvProxySelector.java new file mode 100644 index 0000000000..807a62ee3c --- /dev/null +++ b/backend/src/main/java/io/metersphere/commons/utils/EnvProxySelector.java @@ -0,0 +1,44 @@ +package io.metersphere.commons.utils; + +import org.apache.commons.lang3.StringUtils; + +import java.io.IOException; +import java.net.*; +import java.util.Arrays; +import java.util.List; + +public class EnvProxySelector extends ProxySelector { + ProxySelector defaultProxySelector = ProxySelector.getDefault(); + + @Override + public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { + LogUtil.error("connectFailed : " + uri); + } + + /** + * 获取环境变量http代理配置, + * + * @param uri + * @return + */ + @Override + public List select(URI uri) { + String httpProxy = System.getenv("http_proxy"); + String httpsProxy = System.getenv("https_proxy"); + URI proxy = null; + try { + if (StringUtils.equalsIgnoreCase(uri.getScheme(), "https") + && StringUtils.isNotBlank(httpsProxy)) { + proxy = new URI(httpsProxy); + } else if (StringUtils.isNotBlank(httpProxy)) { + proxy = new URI(httpProxy); + } + if (proxy != null) { + return Arrays.asList(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy.getHost(), proxy.getPort()))); + } + } catch (URISyntaxException e) { + LogUtil.error(e); + } + return defaultProxySelector.select(uri); + } +} diff --git a/backend/src/main/java/io/metersphere/track/issue/client/BaseClient.java b/backend/src/main/java/io/metersphere/track/issue/client/BaseClient.java index e2739be8b9..d1fa8a3833 100644 --- a/backend/src/main/java/io/metersphere/track/issue/client/BaseClient.java +++ b/backend/src/main/java/io/metersphere/track/issue/client/BaseClient.java @@ -4,11 +4,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import io.metersphere.commons.exception.MSException; import io.metersphere.commons.utils.EncryptUtils; +import io.metersphere.commons.utils.EnvProxySelector; import io.metersphere.commons.utils.LogUtil; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.TrustStrategy; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.SystemDefaultRoutePlanner; import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; @@ -31,7 +33,7 @@ public abstract class BaseClient { SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext); CloseableHttpClient httpClient = HttpClients.custom() // 可以支持设置系统代理 - .useSystemProperties() + .setRoutePlanner(new SystemDefaultRoutePlanner(new EnvProxySelector())) .setSSLSocketFactory(csf) .build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();