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 ਸਹਾਇਤਾ ਨਹੀਂ ਦਰਸਾਉਂਦਾ।

ਕਲਾਇੰਟ ਬਿਲਡਰ ਦਾ ਕਨੈਕਸ਼ਨ ਟਾਈਮਆਉਟ ਕਨੈਕਸ਼ਨ ਬਣਾਉਣ ਵੇਲੇ ਲਾਗੂ ਹੁੰਦਾ ਹੈ; ਬੇਨਤੀ ਦਾ ਆਪਣਾ ਟਾਈਮਆਉਟ ਹੈ। ਦੋਵੇਂ ਸਪੱਸ਼ਟ ਰੱਖੋ ਕਿਉਂਕਿ ਬੇਨਤੀ ਮੌਜੂਦਾ ਕਨੈਕਸ਼ਨ ਮੁੜ ਵਰਤ ਸਕਦੀ ਹੈ। ਮੰਜ਼ਿਲ ਦੇ ਕਿਸੇ ਜਵਾਬ ਤੋਂ ਪਹਿਲਾਂ ਨੈੱਟਵਰਕ, ਪ੍ਰਮਾਣੀਕਰਨ ਜਾਂ ਟਨਲ ਐਕਸੈਪਸ਼ਨ ਆ ਸਕਦੀ ਹੈ, ਪਰ ਵਾਪਸ ਆਇਆ ਗ਼ਲਤੀ ਸਟੇਟਸ ਲਾਜ਼ਮੀ ਤੌਰ ’ਤੇ ਐਕਸੈਪਸ਼ਨ ਨਹੀਂ ਚੁੱਕਦਾ।

ਇੱਕੋ ਰੂਟਿੰਗ ਨੀਤੀ ਵਾਲੀਆਂ ਬੇਨਤੀਆਂ ਵਿੱਚ ਕਲਾਇੰਟ ਮੁੜ ਵਰਤੋ ਤਾਂ ਜੋ ਐਪ ਨੂੰ ਉਸ ਦੇ ਕਨੈਕਸ਼ਨ ਪ੍ਰਬੰਧਨ ਦਾ ਫਾਇਦਾ ਮਿਲੇ।

ਸੰਬੰਧਿਤ ਲੇਖ