Java 11 ve sonrasında istemci oluşturucusunda bir ProxySelector ayarlayın. Böylece tüm JVM’yi etkileyen proxy özellikleri değişmez:

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

Belgeleme uç noktasını kendi HTTP proxy’nizle değiştirin; HTTP proxy listesi denenebilecek adaylar sağlar. ProxySelector.of bir soket adresi alır: ana makineyi http:// öneki olmadan kullanın ve portu ayrı verin. HTTP proxy seçer; port numarasına göre SOCKS seçmez. İstek URI’si gerçek hedef olarak kalır.

HTTPS bu HTTP proxy’den tünel kullanarak geçebilir. Hedefin güvenliğini düşürmek gerekmez ve kurulum proxy dinleyicisinin kendisinin TLS desteklediği anlamına gelmez.

İstemci oluşturucusundaki bağlantı zaman aşımı bağlantı kurulurken uygulanır; isteğin kendi zaman aşımı vardır. İstek mevcut bir bağlantıyı yeniden kullanabileceği için ikisini de açık tutun. Ağ, kimlik doğrulama veya tünel istisnası hedefin herhangi bir yanıtından önce oluşabilir; dönen hata durumu ise mutlaka istisna üretmez.

Aynı yönlendirme politikasına sahip isteklerde istemciyi yeniden kullanın; böylece uygulama bağlantı yönetiminden yararlanabilir.

İlgili makaleler