В настоящее время я работаю над проектом, который использует Apache HttpClient 4.1.2, и он получает некоторые данные с веб-сайта.
Что делает приложение: оно переходит на веб-страницу и затем переходит к следующей (найдено), пока не достигнет конца (например: перейдите на страницу 1 -> найдите еще 20 страниц -> перейдите на каждые следующие 20 страниц).Проблема в том, что он застревает при получении некоторых случайных страниц и не продолжает сканирование.
Вот код:
DefaultHttpClient mainHttp;
HttpPost post;
HttpResponse response;
HttpEntity entity;
String s;
int curPage = 1;
int index = 0;
boolean ok = true;
...
while (ok) {
response = mainHttp.execute(post);
entity = response.getEntity();
if (entity != null) {
System.out.println("Enter " + curPage);
s = EntityUtils.toString(entity);
System.out.println("Exit " + curPage);
index = s.indexOf("[" + curPage + "]");
if (index > 0) {
parseContent();
} else {
ok = false;
}
}
}
В окне отладки отображается что-то вроде этого:
Enter 1
Exit 1
.
.
.
Enter n
Я также использую анализатор http-запросов и увидел, что на застрявшей странице данные извлекаются не полностью (они не достигают </html>
или конца страницы).
Что я могу сделать, чтобы пропустить или повторить попытку загрузки данных в таких случаях?Кто-нибудь может мне помочь?
Спасибо!
LE:
Фактические настройки:
mainHttp.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(1, true));
mainHttp.getParams().setParameter("http.connection-manager.timeout", 15000);
mainHttp.getParams().setParameter("http.socket.timeout", 15000);
mainHttp.getParams().setParameter("http.connection.timeout", 15000);
, где 15000
- время ожидания в миллисекундах.
Спасибо за вашу помощь.