HttpClient не возвращает заполненный исходный код HTML - PullRequest
2 голосов
/ 10 декабря 2010

Мне нужно войти на сайт, нажать несколько ссылок на окончательный экран, чтобы загрузить некоторые данные, вот шаги:

  • шаг1: авторизоваться на сайте на первой странице;
  • 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-адрес с указанными выше именными парами в URL-адрес браузера, данные учетной записи будут отображаться правильно. Но отвечающий не возвращает динамически сгенерированные данные учетной записи, возвращается еще что-нибудь, кроме раздела «данных учетной записи».

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

Ответы [ 2 ]

2 голосов
/ 10 декабря 2010

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

0 голосов
/ 10 декабря 2010

Обычно после запроса 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.");
    }
}
...