Как установить файл cookie jsessionid с помощью jsoup?

У меня возникла проблема со следующим тестовым методом аутентификации на сайте университета. Я использую Jsoup и не могу получить файлы cookie (jsessionid) для входа в систему. Метод такой:

public static void Authentication() {

    String strURL = "https://www.studenti.ict.uniba.it/esse3/auth/Logon.do";
    String strUserId = "prova";
    String strPasword = "prova";

    String authString = strUserId + ":" + strPasword;

    String encodedString = new String( Base64.encodeBase64(authString.getBytes()) );

    try{

        Response response = Jsoup.connect(strURL)
                .header("Authorization", "Basic " + encodedString)
                .method(org.jsoup.Connection.Method.GET)
                .timeout(30000)
                .execute();

        System.out.println(response.parse());

        System.out.println("Autenticato");

    }catch (IOException e){
        e.printStackTrace();
    }
}

person Vincenzo Spinelli    schedule 04.08.2016    source источник


Ответы (1)


Вы можете получить файл cookie, создав еще один запрос на главную страницу веб-сайта.

package com.github.davidepastore.stackoverflow38768839;

import java.io.IOException;

import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;

/**
 * Stackoverflow 38768839 answer.
 *
 */
public class App {

    private static final String COOKIE_NAME = "JSESSIONID";

    public static void main(String[] args) throws IOException {
        // Step 1 - Get the cookie
        String homeURL = "https://www.studenti.ict.uniba.it/esse3/Home.do";
        Response response = Jsoup.connect(homeURL).execute();
        String jsessionid = response.cookie(COOKIE_NAME);
        System.out.println(COOKIE_NAME + " cookie: " + jsessionid);

        // Step 2 - Try to login
        String strURL = "https://www.studenti.ict.uniba.it/esse3/auth/Logon.do";
        String strUserId = "prova";
        String strPasword = "prova";

        String authString = strUserId + ":" + strPasword;

        String encodedString = new String(Base64.encodeBase64(authString
                .getBytes()));

        try {

            response = Jsoup.connect(strURL)
                    .header("Authorization", "Basic " + encodedString)
                    .cookie(COOKIE_NAME, jsessionid)
                    .method(org.jsoup.Connection.Method.GET).timeout(30000)
                    .execute();

            System.out.println(response.parse());

            System.out.println("Autenticato");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
person Davide Pastore    schedule 07.08.2016
comment
Спасибо. Помощь для cookie была очень хорошей. Теперь проблема в том, что он не входит в систему и выдает ошибку 401, хотя учетные данные для доступа верны. Ошибка в функции «выполнить». - person Vincenzo Spinelli; 08.08.2016
comment
@VincEnzo Дело в том, что я не могу проверить это, если у меня нет учетных данных. - person Davide Pastore; 09.08.2016
comment
Вы можете оставить мне свой адрес электронной почты? Вы отправляете учетные данные для входа - person Vincenzo Spinelli; 09.08.2016