Der Proxy nahm die TCP-Verbindung an, beendete aber nie die CONNECT-Antwort. Die Antwort der Website hat noch nicht begonnen; ein Timeout, der nur auf diese spätere Antwort zielt, kann diesen Aufbau unbegrenzt warten lassen.

Für Apache HttpClient 5.3.1 setzen Sie die Standardwerte des Connection Managers:

var connection = ConnectionConfig.custom()
    .setConnectTimeout(Timeout.ofSeconds(5))
    .setSocketTimeout(Timeout.ofSeconds(10))
    .build();

var manager = PoolingHttpClientConnectionManagerBuilder.create()
    .setDefaultConnectionConfig(connection)
    .build();

var client = HttpClients.custom()
    .setConnectionManager(manager)
    .setProxy(new HttpHost("http", "proxy.example", 8080))
    .build();

Verwenden Sie die Klassen von Apache HttpComponents 5 unter org.apache.hc, mit Timeout im Paket core5 als Hilfsklasse. Behalten Sie den Client für seine Arbeit und schließen Sie ihn danach. Für einen isolierten öffentlichen HTTP-Test liefert ein Kandidat aus der HTTP-Proxy-Liste den Endpunkt; halten Sie das Ziel konstant, wenn Sie Timeouts vergleichen.

GrenzeAbgedeckte Wartezeit
Connect-TimeoutVerbindungsaufbau
Socket-TimeoutStandard-I/O-Inaktivität, einschließlich des CONNECT-Austauschs
Pool-Beschaffung / Antwort der AnwendungAndere separat konfigurierte Phasen

Nach CONNECT kann TLS eine eigene Einrichtungsgrenze über die TLS-Konfiguration von HttpClient 5 benötigen. Unterscheiden Sie außerdem Inaktivität von einer Gesamtfrist: Unterbrochene Bytes oder wiederholte Authentifizierungsaustausche können die Gesamtzeit verlängern. Nutzen Sie die unterstützte Deadline- und Abbruchrichtlinie der Anwendung für ein Budget für den gesamten Vorgang.

Ähnliche Artikel