Установка тайм-аута http для jakarta HttpClient

Я использую приведенный ниже код в файле конфигурации WebHarvest, чтобы определить время ожидания для элемента http в WebHarvest (Webharvest использует Jakarta HttpClient).
Но пока я устанавливаю его на 20000, до достижения времени ожидания требуется около 40-50 секунд!
И когда я установил его на 30000, тайм-аут никогда не достигает (по крайней мере, за 2 минуты, которые я ждал)!!
Мне нужно только ограничить время ожидания ответа.

<var-def name="WTimeOut">20000</var-def>
<script language="javascript"> 
       var tmot=WTimeOut.toString(); 
       http.client.params.soTimeout = tmot; 
       http.client.params.connectionManagerTimeout = tmot;
       http.client.httpConnectionManager.params.connectionTimeout = tmot; 
</script> 

Я также пытался сделать это с помощью самого java-кода или HttpClient по этому коду:

HttpClient whClient = scraper.getHttpClientManager().getHttpClient();
whClient.getParams().setParameter("http.connection-manager.timeout", (long)20000);
whClient.getParams().setParameter("http.socket.timeout",(int)20000);

Но я получил те же результаты!
Как это:

SO_TIMEOUT срабатывает только при отсутствии активности в HTTP-соединении.

Итак, что я могу сделать, чтобы установить ограничение по времени ожидания ответа?

Спасибо


person Ariyan    schedule 20.12.2011    source источник


Ответы (1)


http.socket.timeout устанавливает время ожидания между двумя последовательными пакетами. Таким образом, если данные поступают очень медленно, но достаточно быстро, чтобы не вызвать тайм-аут, соединение не будет разорвано.

Вы также можете установить http.connection.timeout, чтобы ограничить время ожидания до установления соединения.

Однако нет встроенного способа установить жесткое ограничение по времени на длину всего запроса.

person Lauri Piispanen    schedule 27.12.2011