From ce5881bad15c730a596c1874640208e40b9eb311 Mon Sep 17 00:00:00 2001 From: 3nprob <74199244+3nprob@users.noreply.github.com> Date: Fri, 13 Aug 2021 18:38:15 +0000 Subject: [PATCH] Add support for outbound http proxy (#93) * Add support for outbound http proxy * Simplify logic and fix typos. Co-authored-by: 3nprob <3nprob@3nprob> Co-authored-by: FireMasterK <20838718+FireMasterK@users.noreply.github.com> --- config.properties | 3 +++ .../java/me/kavin/piped/consts/Constants.java | 25 +++++++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/config.properties b/config.properties index ae67038..e088c3b 100644 --- a/config.properties +++ b/config.properties @@ -7,6 +7,9 @@ HTTP_WORKERS: 2 # Proxy PROXY_PART: https://pipedproxy-ams.kavin.rocks +# Outgoing HTTP Proxy - eg: 127.0.0.1:8118 +#HTTP_PROXY: 127.0.0.1:8118 + # Captcha Parameters CAPTCHA_BASE_URL: https://api.capmonster.cloud/ CAPTCHA_API_KEY: INSERT_HERE diff --git a/src/main/java/me/kavin/piped/consts/Constants.java b/src/main/java/me/kavin/piped/consts/Constants.java index 50695ab..a2a6af1 100644 --- a/src/main/java/me/kavin/piped/consts/Constants.java +++ b/src/main/java/me/kavin/piped/consts/Constants.java @@ -1,11 +1,15 @@ package me.kavin.piped.consts; import java.io.FileReader; +import java.net.InetSocketAddress; +import java.net.ProxySelector; import java.net.http.HttpClient; +import java.net.http.HttpClient.Builder; import java.net.http.HttpClient.Redirect; import java.net.http.HttpClient.Version; import java.util.Properties; +import org.apache.commons.lang3.StringUtils; import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.Page; import org.schabi.newpipe.extractor.StreamingService; @@ -32,11 +36,10 @@ public class Constants { public static final String PUBLIC_URL; - public static final HttpClient h2client = HttpClient.newBuilder().followRedirects(Redirect.NORMAL) - .version(Version.HTTP_2).build(); - public static final HttpClient h2_no_redir_client = HttpClient.newBuilder().followRedirects(Redirect.NEVER) - .version(Version.HTTP_2).build(); -// public static final HttpClient h3client = Http3ClientBuilder.newBuilder().followRedirects(Redirect.NORMAL).build(); + public static final String HTTP_PROXY; + + public static final HttpClient h2client; + public static final HttpClient h2_no_redir_client; public static final ObjectMapper mapper = new ObjectMapper().addMixIn(Page.class, PageMixin.class); @@ -54,11 +57,23 @@ public class Constants { CAPTCHA_BASE_URL = prop.getProperty("CAPTCHA_BASE_URL"); CAPTCHA_API_KEY = prop.getProperty("CAPTCHA_API_KEY"); PUBLIC_URL = prop.getProperty("API_URL"); + HTTP_PROXY = prop.getProperty("HTTP_PROXY"); prop.forEach((_key, _value) -> { String key = String.valueOf(_key), value = String.valueOf(_value); if (key.startsWith("hibernate")) hibernateProperties.put(key, value); }); + Builder builder = HttpClient.newBuilder().followRedirects(Redirect.NORMAL).version(Version.HTTP_2); + Builder builder_noredir = HttpClient.newBuilder().followRedirects(Redirect.NEVER).version(Version.HTTP_2); + if (HTTP_PROXY != null && HTTP_PROXY.contains(":")) { + String host = StringUtils.substringBefore(HTTP_PROXY, ":"); + String port = StringUtils.substringAfter(HTTP_PROXY, ":"); + InetSocketAddress sa = new InetSocketAddress(host, Integer.parseInt(port)); + ProxySelector ps = ProxySelector.of(sa); + ProxySelector.setDefault(ps); + } + h2client = builder.build(); + h2_no_redir_client = builder_noredir.build(); } catch (Exception e) { throw new RuntimeException(e); }