Använd en HTTP-proxy med Java HttpClient
Skicka en ProxySelector till Javas HTTP-klientbyggare och håll anslutnings- och förfrågningstidsgränserna separata.
I Java 11 eller senare anger du en ProxySelector i klientbyggaren. Då lämnas proxyegenskaperna för hela JVM:en orörda:
import java.net.InetSocketAddress;
import java.net.ProxySelector;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class ProxyExample {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("203.0.113.10", 8080)))
.connectTimeout(Duration.ofSeconds(5))
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/"))
.timeout(Duration.ofSeconds(15))
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}Byt dokumentationsendpointen mot din HTTP-proxy; HTTP-proxylistan erbjuder kandidater att testa. ProxySelector.of tar en socketadress: ange värden utan prefixet http:// och ange porten separat. Det väljer en HTTP-proxy, inte SOCKS utifrån portnumret. Förfrågningens URI är fortfarande den riktiga destinationen.
HTTPS kan passera denna HTTP-proxy genom en tunnel. Målet behöver inte nedgraderas och inställningen innebär inte att proxylyssnaren själv stöder TLS.
Klientbyggarens anslutningstidsgräns gäller när en anslutning upprättas; förfrågan har en egen tidsgräns. Håll båda synliga eftersom en förfrågan kan återanvända en befintlig anslutning. Ett nätverks-, autentiserings- eller tunnelundantag kan inträffa före något svar från målet, medan en returnerad felstatus inte måste ge ett undantag.
Återanvänd klienten för förfrågningar med samma routningspolicy så att programmet kan dra nytta av dess anslutningshantering.