Usar un proxy HTTP con Java HttpClient
Pasa un ProxySelector ao construtor do cliente HTTP de Java e separa os tempos de espera de conexión e de petición.
En Java 11 ou posterior, establece un ProxySelector no construtor do cliente. As propiedades de proxy de toda a JVM quedan así sen cambios:
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());
}
}Substitúe o punto de documentación polo teu proxy HTTP; a lista de proxies HTTP ofrece candidatos para probar. ProxySelector.of recibe un enderezo de socket: usa o host sen o prefixo http:// e indica o porto por separado. Selecciona un proxy HTTP, non SOCKS segundo o número do porto. O URI da petición segue sendo o destino real.
HTTPS pode pasar por este proxy HTTP mediante un túnel. Non hai que rebaixar a protección do destino e a configuración non implica soporte TLS no propio punto de escoita do proxy.
O tempo de espera de conexión do construtor aplícase ao establecer unha conexión; a petición ten o seu propio límite. Mantén ambos explícitos porque unha petición pode reutilizar unha conexión existente. Unha excepción de rede, autenticación ou túnel pode producirse antes de calquera resposta do destino, mentres que un estado de erro recibido non ten por que xerar unha excepción.
Reutiliza o cliente para peticións coa mesma política de encamiñamento, para que a aplicación aproveite a súa xestión de conexións.