Upotreba HTTP proxyja u Java HttpClientu
Predajte ProxySelector graditelju HTTP klijenta u Javi i odvojite vremensko ograničenje veze od ograničenja zahtjeva.
U Javi 11 ili novijoj postavite ProxySelector na graditelju klijenta. Svojstva proxyja za cijeli JVM tako ostaju nepromijenjena:
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());
}
}Zamijenite dokumentacijsku krajnju točku svojim HTTP proxyjem; popis HTTP proxyja nudi kandidate za testiranje. ProxySelector.of prima adresu socketa: koristite host bez prefiksa http:// i port zadajte zasebno. Odabire HTTP proxy, a ne SOCKS prema broju porta. URI zahtjeva ostaje stvarno odredište.
HTTPS može prolaziti kroz taj HTTP proxy tunelom. Ne treba smanjivati zaštitu odredišta i postavka ne znači da sam slušatelj proxyja podržava TLS.
Vremensko ograničenje veze u graditelju klijenta vrijedi pri uspostavi veze; zahtjev ima vlastito ograničenje. Oba neka budu jasna jer zahtjev može ponovno iskoristiti postojeću vezu. Iznimka mreže, autentifikacije ili tunela može nastati prije bilo kojeg odgovora odredišta, dok vraćeni status pogreške ne mora uzrokovati iznimku.
Ponovno koristite klijenta za zahtjeve s istom politikom usmjeravanja kako bi aplikacija iskoristila njegovo upravljanje vezama.