El proxy aceptó TCP pero nunca terminó la respuesta CONNECT. La respuesta del sitio web aún no ha comenzado; un tiempo de espera dirigido solo a esa respuesta posterior puede dejar este establecimiento esperando sin límite.

Para Apache HttpClient 5.3.1, configure los valores predeterminados del gestor de conexiones:

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

Utilice las clases de Apache HttpComponents 5 bajo org.apache.hc, con Timeout en el paquete de utilidades core5. Conserve el cliente para su trabajo y ciérrelo. Para una prueba HTTP pública aislada, un candidato de la lista de proxies HTTP proporciona el punto de conexión; mantenga el destino estable al comparar tiempos de espera.

LímiteEspera cubierta
Tiempo de espera de conexiónEstablecimiento de la conexión
Tiempo de espera de socketInactividad de I/O predeterminada, incluido el intercambio CONNECT
Obtención del grupo / respuesta de la aplicaciónOtras etapas configuradas por separado

Después de CONNECT, TLS puede necesitar su propio límite de establecimiento mediante la configuración TLS de HttpClient 5. Distinga también la inactividad de una fecha límite total: los bytes intermitentes o los intercambios de autenticación repetidos pueden ampliar el tiempo total. Utilice la política de fecha límite o cancelación compatible con la aplicación para un presupuesto para toda la operación.

Artículos relacionados