Java HttpClient में HTTP प्रॉक्सी इस्तेमाल करें
Java के HTTP क्लाइंट बिल्डर को ProxySelector दें और कनेक्शन व अनुरोध के टाइमआउट अलग रखें।
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 समर्थन का संकेत नहीं है।
क्लाइंट बिल्डर का कनेक्शन टाइमआउट कनेक्शन बनाते समय लागू होता है; अनुरोध का अपना टाइमआउट होता है। दोनों स्पष्ट रखें क्योंकि अनुरोध मौजूदा कनेक्शन दोबारा इस्तेमाल कर सकता है। गंतव्य का कोई जवाब आने से पहले नेटवर्क, प्रमाणीकरण या टनल अपवाद आ सकता है, जबकि लौटा हुआ त्रुटि स्टेटस ज़रूरी नहीं कि अपवाद उठाए।
एक ही रूटिंग नीति वाले अनुरोधों के लिए क्लाइंट दोबारा इस्तेमाल करें ताकि ऐप को उसके कनेक्शन प्रबंधन का लाभ मिले।