Прокси принял TCP, но так и не завершил ответ CONNECT. Ответ сайта ещё не начался; тайм-аут, нацеленный только на этот более поздний ответ, может оставить эту установку в бесконечном ожидании.

Для Apache HttpClient 5.3.1 задайте значения по умолчанию менеджера соединений:

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

Используйте классы Apache HttpComponents 5 в org.apache.hc, с Timeout во вспомогательном пакете core5. Сохраняйте клиент для его работы и закрывайте его. Для изолированного публичного HTTP-теста кандидат из списка HTTP-прокси предоставляет конечную точку; держите пункт назначения неизменным при сравнении тайм-аутов.

ПределУчитываемое ожидание
Тайм-аут соединенияУстановка соединения
Тайм-аут сокетаБездействие I/O по умолчанию, включая обмен CONNECT
Получение из пула / ответ приложенияДругие отдельно настраиваемые этапы

После CONNECT протоколу TLS может потребоваться собственный предел установки через конфигурацию TLS в HttpClient 5. Также отличайте бездействие от общего срока: прерывистые байты или повторяющиеся обмены аутентификацией могут увеличить общее время. Используйте поддерживаемую приложением политику срока или отмены для одного бюджета на всю операцию.

Похожие статьи