À partir de Java 11, définissez un ProxySelector sur le constructeur du client. Les propriétés de proxy de toute la JVM restent ainsi inchangées :

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());
    }
}

Remplacez le point d’accès de documentation par votre proxy HTTP ; la liste de proxies HTTP propose des candidats à tester. ProxySelector.of prend une adresse de socket : indiquez l’hôte sans préfixe http:// et fournissez le port séparément. Il sélectionne un proxy HTTP, pas SOCKS en fonction du numéro de port. L’URI de la requête reste la véritable destination.

HTTPS peut passer par ce proxy HTTP dans un tunnel. Il n’est pas nécessaire de rétrograder la destination, et ce réglage n’implique pas que le point d’écoute du proxy prenne lui-même en charge TLS.

Le délai de connexion du constructeur s’applique à l’établissement d’une connexion ; la requête possède son propre délai. Gardez les deux explicites, car une requête peut réutiliser une connexion existante. Une exception de réseau, d’authentification ou de tunnel peut survenir avant toute réponse de la destination, tandis qu’un statut d’erreur reçu ne déclenche pas forcément d’exception.

Réutilisez le client pour les requêtes ayant la même politique de routage afin de profiter de sa gestion des connexions.

Articles similaires