From 01bfc3ee181497e2a1e00053396f6b3cc0931332 Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Wed, 13 May 2026 10:16:18 +0800 Subject: [PATCH] feat(partnerctl-fetch): support fetching raw data via https proxy --- .../slhaf/partner/ctl/support/web_fetch.kt | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/PartnerCtl/src/main/java/work/slhaf/partner/ctl/support/web_fetch.kt b/PartnerCtl/src/main/java/work/slhaf/partner/ctl/support/web_fetch.kt index c42d8e7e..a482c6c2 100644 --- a/PartnerCtl/src/main/java/work/slhaf/partner/ctl/support/web_fetch.kt +++ b/PartnerCtl/src/main/java/work/slhaf/partner/ctl/support/web_fetch.kt @@ -1,6 +1,8 @@ package work.slhaf.partner.ctl.support import java.io.IOException +import java.net.InetSocketAddress +import java.net.ProxySelector import java.net.URI import java.net.http.* import java.time.Duration @@ -8,8 +10,28 @@ import java.time.Duration private val httpClient: HttpClient = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(20)) .followRedirects(HttpClient.Redirect.NEVER) + .apply { + proxySelectorFromEnv()?.let(::proxy) + } .build() +private fun proxySelectorFromEnv(): ProxySelector? { + val proxyText = System.getenv("HTTPS_PROXY") + ?: System.getenv("https_proxy") + ?: return null + + val proxyUri = URI.create(proxyText) + val host = proxyUri.host + ?: throw IllegalArgumentException("Invalid HTTPS_PROXY host: $proxyText") + + val port = proxyUri.port + if (port == -1) { + throw IllegalArgumentException("HTTPS_PROXY must include port: $proxyText") + } + + return ProxySelector.of(InetSocketAddress(host, port)) +} + fun fetchText(url: String): String { var lastError: Exception? = null