Вход в HttpClient, поиск и получение содержимого XML - PullRequest
0 голосов
/ 13 января 2010

Я хочу войти на сайт, используя HttpClient, и после входа в систему я хочу что-то найти и получить содержимое результата поиска.

/**
 * A example that demonstrates how HttpClient APIs can be used to perform
 * form-based logon.
 */
public class TestHttpClient {

    public static void main(String[] args) throws Exception {

        DefaultHttpClient httpclient = new DefaultHttpClient();

        HttpGet httpget = new HttpGet("http://projecteuler.net/");

        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();

        System.out.println("Login form get: " + response.getStatusLine());
        if (entity != null) {
            entity.consumeContent();
        }
        System.out.println("Initial set of cookies:");
        List<Cookie> cookies = httpclient.getCookieStore().getCookies();
        if (cookies.isEmpty()) {
            System.out.println("None");
        } else {
            for (int i = 0; i < cookies.size(); i++) {
                System.out.println("- " + cookies.get(i).toString());
            }
        }

        HttpPost httpost = new HttpPost("http://projecteuler.net/index.php?section=login");

        List <NameValuePair> nvps = new ArrayList <NameValuePair>();
        nvps.add(new BasicNameValuePair("IDToken1", "username"));
        nvps.add(new BasicNameValuePair("IDToken2", "password"));

        httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

        response = httpclient.execute(httpost);

        System.out.println("Response "+response.toString());
        entity = response.getEntity();

        System.out.println("Login form get: " + response.getStatusLine());
        if (entity != null) {

            InputStream is = entity.getContent();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String str ="";
            while ((str = br.readLine()) != null){
                System.out.println(""+str);
            }
        }

        System.out.println("Post logon cookies:");
        cookies = httpclient.getCookieStore().getCookies();
        if (cookies.isEmpty()) {
            System.out.println("None");
        } else {
            for (int i = 0; i < cookies.size(); i++) {
                System.out.println("- " + cookies.get(i).toString());
            }
        }
        httpclient.getConnectionManager().shutdown();        
    }
}

когда я печатаю вывод из HttpEntity, он печатает содержимое страницы входа. Как получить содержимое страницы после входа в систему с помощью HttpClient?

1 Ответ

1 голос
/ 13 января 2010

Пост должен имитировать форму отправки. Не нужно сначала получить страницу входа. Если я посмотрю на http://projecteuler.net,, то, похоже, форма отправлена ​​в index.php, поэтому я бы попробовал изменить URL-адрес публикации:

HttpPost httpost = new HttpPost("http://projecteuler.net/index.php");

Используйте что-то вроде Fire bug, чтобы увидеть, что именно происходит в браузере. Возможно, вам следует выполнить редирект после входа в систему (HttpClient поддерживает это). Также, кажется, есть параметр с именем «login» со значением «Login», который публикуется.

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