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ను సమర్థిస్తుందని సూచించదు.
క్లయింట్ బిల్డర్ కనెక్షన్ టైమ్అవుట్ కనెక్షన్ ఏర్పరచేటప్పుడు వర్తిస్తుంది; అభ్యర్థనకు దాని స్వంత టైమ్అవుట్ ఉంది. అభ్యర్థన ఉన్న కనెక్షన్ను తిరిగి వాడవచ్చు కాబట్టి రెండింటినీ స్పష్టంగా ఉంచండి. గమ్యస్థానం నుంచి ఏ జవాబుకన్నా ముందే నెట్వర్క్, ప్రమాణీకరణ లేదా టన్నెల్ ఎక్సెప్షన్ రావచ్చు; తిరిగివచ్చిన లోప స్థితి తప్పనిసరిగా ఎక్సెప్షన్ లేవనెత్తదు.
ఒకే రూటింగ్ విధానం ఉన్న అభ్యర్థనలకు క్లయింట్ను తిరిగి వాడండి, తద్వారా యాప్ దాని కనెక్షన్ నిర్వహణను ఉపయోగించుకుంటుంది.