Bruk en HTTP-proxy med Java HttpClient
Gi Javas HTTP-klientbygger en ProxySelector, og hold tidsavbrudd for tilkobling og forespørsel adskilt.
I Java 11 eller nyere angir du en ProxySelector i klientbyggeren. Proxyegenskapene for hele JVM-en forblir da urørt:
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());
}
}Erstatt dokumentasjonsendepunktet med din HTTP-proxy; HTTP-proxylisten tilbyr kandidater å teste. ProxySelector.of tar en socketadresse: bruk verten uten http://-prefiks og oppgi porten separat. Den velger en HTTP-proxy, ikke SOCKS ut fra portnummeret. Forespørselens URI er fortsatt den egentlige destinasjonen.
HTTPS kan gå gjennom denne HTTP-proxyen via en tunnel. Destinasjonen trenger ikke nedgraderes, og oppsettet betyr ikke at proxyens lytter selv støtter TLS.
Klientbyggerens tilkoblingstidsavbrudd gjelder når en forbindelse opprettes; forespørselen har sitt eget tidsavbrudd. Hold begge synlige fordi en forespørsel kan gjenbruke en eksisterende forbindelse. Et nettverks-, autentiserings- eller tunnelunntak kan oppstå før noe svar fra destinasjonen, mens en returnert feilstatus ikke må gi et unntak.
Gjenbruk klienten til forespørsler med samme rutingspolicy, slik at programmet kan dra nytte av tilkoblingshåndteringen.