Задаване на таймаут за прокси 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. Различавайте също неактивността от общ краен срок: прекъснати байтове или повторни обмени за удостоверяване могат да удължат общото време. Използвайте поддържаната от приложението политика за краен срок или отказ за един бюджет за цялата операция.