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ला समर्थन देतो असा नाही.
क्लायंट बिल्डरचा कनेक्शन टाइमआउट कनेक्शन बनवताना लागू होतो; विनंतीचा स्वतःचा टाइमआउट असतो. दोन्ही स्पष्ट ठेवा, कारण विनंती आधीचे कनेक्शन पुन्हा वापरू शकते. गंतव्याचे उत्तर येण्याआधी नेटवर्क, प्रमाणीकरण किंवा टनेल अपवाद येऊ शकतो, तर परत आलेला त्रुटी स्टेटस नेहमीच अपवाद उभा करेल असे नाही.
एकाच राउटिंग धोरणाच्या विनंत्यांसाठी क्लायंट पुन्हा वापरा, ज्यामुळे अॅपला त्याच्या कनेक्शन व्यवस्थापनाचा फायदा होईल.