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 समर्थन गर्छ भन्ने जनाउँदैन।

क्लाइन्ट बिल्डरको जडान टाइमआउट जडान बनाउँदा लागू हुन्छ; अनुरोधको आफ्नै टाइमआउट हुन्छ। दुवै स्पष्ट राख्नुहोस्, किनकि अनुरोधले पुरानो जडान फेरि प्रयोग गर्न सक्छ। गन्तव्यको कुनै जवाफ आउनुअघि नेटवर्क, प्रमाणीकरण वा टनेल एक्सेप्सन आउन सक्छ, तर फर्किएको त्रुटि स्टेटसले अनिवार्य रूपमा एक्सेप्सन उठाउनुपर्दैन।

एउटै राउटिङ नीतिका अनुरोधमा क्लाइन्ट फेरि प्रयोग गर्नुहोस्, ताकि एपले यसको जडान व्यवस्थापनबाट लाभ पाओस्।

सम्बन्धित लेखहरू