2010-12-10 4 views
2

Мне нужно войти в системе на веб-сайт, нажмите несколько ссылок на последний экран, чтобы загрузить некоторые данные, вот шаги:HttpClient не возвращает завершенный HTML исходного кода

  • step1: войти в сайт на первой странице;
  • step2: нажмите на ссылку «просмотреть» на первой странице, чтобы перейти на вторую страницу;
  • step3: на второй странице введите «номер учетной записи», нажмите кнопку «Отправить», чтобы отобразить множество строк данных, я называю это третьей страницей) (я получаю прямой URL-адрес на третьей странице, вставляя этот URL-адрес в адресной строке браузера, третья страница отображается правильно)

вот моя проблема: Я использую Httpclient. Он прошел страницу входа в систему, и он может попасть на третью страницу, но только возвращает статическую часть на странице, часть динамически сгенерированных данных на основе ввода «номер счета» не возвращается.

Вот код:

HttpClient client = new HttpClient(); 
client.getHostConfiguration().setHost(loginUrl); 

PostMethod postMethod = new PostMethod(serverUrl); 
// Prepare login parameters 
NameValuePair[] data = { 
    new NameValuePair("passUID",account), 
    new NameValuePair("passUCD",password) 
}; 

postMethod.setRequestBody(data); 
// I can print out the html code of the login page here 

//request the third page with URL: serverUrl4 
postMethod = new PostMethod(serverUrl4); 
    NameValuePair[] data2 = { 
       new NameValuePair("passUID",account), 
       new NameValuePair("passUCD",""), 
       new NameValuePair("page", "view"), 
       new NameValuePair("procacct", "0"), 
       new NameValuePair("AcctNo", "xxxxxxxxx") 
    }; 

postMethod.setRequestBody(data2); 
client.executeMethod(postMethod); 
byte[] responseBody = postMethod.getResponseBody(); 

Если я вставить URL с выше namevaluepairs в URL в браузере, данные учетной записи отображается правильно. Но тело ответа не возвращает динамически сгенерированные данные учетной записи, ничего другого не возвращается, а раздел «данных учетной записи».

Кто-нибудь знает почему? Любая помощь высоко ценится.

ответ

2

Используется ли страница с использованием JavaScript для создания этих данных? Если это так, HTTPClient не будет достаточно, чтобы получить то, что вы хотите.

+0

благодарит Эндрю! это данные, сгенерированные javascript. Не могли бы вы посоветовать что-нибудь для решения этой проблемы? – swei 2010-12-13 21:34:02

+0

не знает намного больше о целевой странице. Если это просто вызов ajax в веб-сервисе, вы можете подражать этому, но если он выполняет вычисления на лету, вам может быть не повезло. – 2010-12-13 22:14:16

0

Обычно после запроса POST запрашивается запрос redirect (HTTP/1.1 302), проверьте код состояния ответов сервера. Также вы должны указать cookies, который используется сервером для идентификации зарегистрированных пользователей.

Edit:

Желания этот фрагмент кода помогает:

if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY) { 
    Header locationHeader = postMethod.getResponseHeader("location"); 
    if (locationHeader != null) { 
     String location = locationHeader.getValue(); 
     System.out.println("The page was redirected to:" + location); 
     /* **strong text** 
     here is code to handle redirect to 
     "location" got from response headers 
     */ 
    } else { 
      System.err.println("Location field value is null."); 
    } 
} 
Смежные вопросы