Проксі прийняв 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. Також розрізняйте бездіяльність і загальний дедлайн: переривчасті байти або повторні обміни автентифікації можуть подовжити загальний час. Використовуйте підтримувану програмою політику дедлайну або скасування для одного бюджету на всю операцію.

Схожі статті