Тайм-аут для проксі Apache HttpClient 5, що зависає під час CONNECT
Задайте тайм-аут socket I/O менеджера з'єднань для встановлення тунелю разом з окремим тайм-аутом TCP-з'єднання.
Проксі прийняв 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. Також розрізняйте бездіяльність і загальний дедлайн: переривчасті байти або повторні обміни автентифікації можуть подовжити загальний час. Використовуйте підтримувану програмою політику дедлайну або скасування для одного бюджету на всю операцію.