Загрузите веб-страницу, которая должна войти - PullRequest
0 голосов
/ 08 февраля 2012

Я хочу получить файл .ics с веб-страницы, но там мне нужно войти. Я могу войти с помощью следующего кода:

    DefaultHttpClient httpclient = new DefaultHttpClient();

    HttpGet httpget = new HttpGet("http://ipool.ba-berlin.de/stundenplaene.anzeige.php?faculty=15&course=6&type=html");

    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://ipool.ba-berlin.de/main.php?action=login");

    List<NameValuePair> nvps = new ArrayList<NameValuePair>();
    nvps.add(new BasicNameValuePair("FORM_LOGIN_NAME", "MY_USERNAME"));
    nvps.add(new BasicNameValuePair("FORM_LOGIN_PASS", "MY_PASSWORD"));

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

    response = httpclient.execute(httpost);
    entity = response.getEntity();

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

    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();

Но после входа в систему я не знаю, как получить содержимое моего файла. Как я могу сделать это возможным?

Большое спасибо!

1 Ответ

0 голосов
/ 08 февраля 2012

Если я понимаю, что ваш вопрос после входа в систему, вы должны запросить ресурсы (URL-адрес файла) с вашим сессионным cookie.

попробуйте что-то вроде этого

CookieStore cookieStore = new BasicCookieStore(); 
BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", mySessionId);

cookieStore.addCookie(cookie); 
client.setCookieStore(cookieStore); 

Вам уже удалось войти, поэтому вы должны были получить сессионный cookie в ответ, я вижу это в вашем коде, теперь вы должны сделать новый http-запрос к URL, где находится ваш файл, но на стороне сервера необходимо проверить, что вы уже вошли в систему, чтобы он сохранял данные о вас в объекте сеанса на основе идентификатора, который вы получили в ответ на файл cookie с именем JSESSIONID вам необходимо передать этот файл cookie вместе с новым запросом; в примере создается новый файл cookie, который можно напрямую передать полученному файлу

...