Блок Java Apache HttpClient EnityUtils - PullRequest
0 голосов
/ 24 ноября 2011

В настоящее время я работаю над проектом, который использует 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 - время ожидания в миллисекундах.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 24 ноября 2011
DefaultMethodRetryHandler retryhandler = new DefaultMethodRetryHandler(1, true);
mainHttp.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, retryhandler);   

Источник: http://hc.apache.org/httpclient-3.x/tutorial.html ( Метод восстановления )

Но это только в том случае, если возникли какие-либо исключения, попробуйте проверять наличие IOExceptions каждый раз, когда вы делаете запрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...