Fer servir un proxy HTTP amb Java HttpClient
Passa un ProxySelector al constructor del client HTTP de Java i separa els temps d’espera de connexió i de petició.
A Java 11 o posterior, estableix un ProxySelector al constructor del client. Això deixa intactes les propietats de proxy de tota la 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());
}
}Substitueix el punt final de documentació pel teu proxy HTTP; la llista de proxies HTTP ofereix candidats per provar. ProxySelector.of rep una adreça de sòcol: fes servir l’amfitrió sense el prefix http:// i indica el port per separat. Selecciona un proxy HTTP, no SOCKS segons el número de port. L’URI de la petició continua sent la destinació real.
HTTPS pot travessar aquest proxy HTTP mitjançant un túnel. No cal rebaixar la protecció de la destinació i la configuració no implica que el mateix punt d’escolta del proxy admeti TLS.
El temps d’espera de connexió del constructor s’aplica quan s’estableix una connexió; la petició en té un de propi. Mantén-los tots dos explícits perquè una petició pot reutilitzar una connexió existent. Una excepció de xarxa, autenticació o túnel pot aparèixer abans de cap resposta de la destinació, mentre que un estat d’error retornat no ha de generar necessàriament una excepció.
Reutilitza el client per a peticions amb la mateixa política d’encaminament perquè l’aplicació n’aprofiti la gestió de connexions.