Použitie HTTP proxy v Java HttpClient
Odovzdajte ProxySelector builderu HTTP klienta Javy a oddeľte časový limit spojenia od limitu požiadavky.
V Jave 11 alebo novšej nastavte ProxySelector v builderi klienta. Vlastnosti proxy pre celú JVM tak zostanú bez zmeny:
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 vlastnou HTTP proxy; zoznam HTTP proxy ponúka kandidátov na testovanie. ProxySelector.of prijíma adresu socketu: použite hostiteľa bez predpony http:// a port zadajte osobitne. Vyberá HTTP proxy, nie SOCKS podľa čísla portu. URI požiadavky zostáva skutočným cieľom.
HTTPS môže cez túto HTTP proxy prechádzať tunelom. Nie je nutné znižovať zabezpečenie cieľa a nastavenie neznamená podporu TLS na samotnom poslucháči proxy.
Časový limit spojenia v builderi klienta platí pri nadväzovaní spojenia; požiadavka má vlastný limit. Nechajte oba zreteľné, pretože požiadavka môže znovu použiť existujúce spojenie. Výnimka siete, overovania alebo tunela môže nastať pred akoukoľvek odpoveďou cieľa, kým vrátený chybový stav nemusí vyvolať výnimku.
Klienta používajte opakovane pre požiadavky s rovnakou politikou smerovania, aby aplikácia využila jeho správu spojení.