У Java 11 і навейшых задайце ProxySelector у будаўніку кліента. Уласцівасці проксі для ўсёй JVM застануцца нязменнымі:

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

Замяніце дакументацыйны пункт сваім HTTP-проксі; спіс HTTP-проксі дае кандыдатаў для праверкі. ProxySelector.of прымае адрас сокета: выкарыстоўвайце хост без прэфікса http:// і перадавайце порт асобна. Выбіраецца HTTP-проксі, а не SOCKS паводле нумара порта. URI запыту застаецца сапраўдным прызначэннем.

HTTPS можа праходзіць праз гэты HTTP-проксі па тунэлі. Зніжаць абарону прызначэння не трэба, а налада не азначае падтрымкі TLS самім слухачом проксі.

Тайм-аўт злучэння ў будаўніку дзейнічае пры ўсталяванні злучэння; у запыту ёсць уласны тайм-аўт. Няхай абодва будуць яўнымі, бо запыт можа паўторна выкарыстаць гатовае злучэнне. Выключэнне сеткі, аўтэнтыфікацыі або тунэля можа ўзнікнуць да любога адказу прызначэння, а вернуты статус памылкі не абавязкова выклікае выключэнне.

Паўторна выкарыстоўвайце кліент для запытаў з адной палітыкай маршрутызацыі, каб праграма карысталася яго кіраваннем злучэннямі.

Падобныя артыкулы