Použití HTTP proxy v Java HttpClient
Předejte ProxySelector do builderu HTTP klienta Javy a oddělte časový limit spojení od limitu požadavku.
V Javě 11 nebo novější nastavte ProxySelector v builderu klienta. Vlastnosti proxy pro celou JVM tak zůstanou beze změny:
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());
}
}Nahraďte dokumentační koncový bod vlastní HTTP proxy; seznam HTTP proxy nabízí kandidáty k testování. ProxySelector.of přijímá adresu socketu: použijte hostitele bez předpony http:// a port zadejte zvlášť. Vybírá HTTP proxy, nikoli SOCKS podle čísla portu. URI požadavku zůstává skutečným cílem.
HTTPS může přes tuto HTTP proxy procházet tunelem. Není nutné snižovat zabezpečení cíle a nastavení neznamená podporu TLS na samotném posluchači proxy.
Časový limit spojení v builderu klienta se uplatní při navazování spojení; požadavek má vlastní limit. Udržujte oba zřejmé, protože požadavek může znovu použít existující spojení. Výjimka sítě, ověřování nebo tunelu může nastat před jakoukoli odpovědí cíle, zatímco vrácený chybový stav nemusí vyvolat výjimku.
Klienta znovu používejte pro požadavky se stejnou politikou směrování, aby aplikace využila jeho správu spojení.