U Javi 11 ili novijoj postavite ProxySelector na graditelju klijenta. Svojstva proxyja za cijeli JVM tako ostaju nepromijenjena:

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());
    }
}

Zamijenite dokumentacijsku krajnju tačku svojim HTTP proxyjem; lista HTTP proxyja nudi kandidate za testiranje. ProxySelector.of prima adresu socketa: koristite host bez prefiksa http:// i port zadajte zasebno. Bira HTTP proxy, a ne SOCKS prema broju porta. URI zahtjeva ostaje stvarno odredište.

HTTPS može prolaziti kroz taj HTTP proxy tunelom. Ne treba smanjivati zaštitu odredišta i postavka ne znači da sam slušalac proxyja podržava TLS.

Vremensko ograničenje veze u graditelju klijenta važi pri uspostavi veze; zahtjev ima vlastito ograničenje. Oba neka budu jasna jer zahtjev može ponovo iskoristiti postojeću vezu. Izuzetak mreže, autentifikacije ili tunela može nastati prije bilo kojeg odgovora odredišta, dok vraćeni status greške ne mora uzrokovati izuzetak.

Ponovo koristite klijenta za zahtjeve s istom politikom usmjeravanja kako bi aplikacija iskoristila njegovo upravljanje vezama.

Povezani članci