Logowanie się na stronę przez JSOUP przy użyciu JSONA

0

Cześć Wszystkim,
napisałem kod, który loguje się na stronie myBenefit.pl

public class MyBenefit {
    final static String USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15";
    final static String LOGIN_FORM_URL = "https://system.mybenefit.pl/mybenefit/login.html";
    final static String LOGIN_ACTION_URL = "https://system.mybenefit.pl/mybenefit/login/by_email";
    final static String USERNAME = "xxx";
    final static String PASSWORD = "xxx";

    public static void main(String[] args) {
        try {
            Connection.Response loginForm = Jsoup.connect(LOGIN_FORM_URL)
                    .method(Connection.Method.GET)
                    .userAgent(USER_AGENT)
                    .execute();

            HashMap<String, String> cookies = new HashMap<>(loginForm.cookies());

            HashMap<String, String> formData = new HashMap<>();
            formData.put("captcha", "");
            formData.put("email", USERNAME);
            formData.put("lang", "pl");
            formData.put("password", PASSWORD);

            Connection.Response homePage = Jsoup.connect(LOGIN_ACTION_URL)
                    .cookies(cookies)
                    .ignoreContentType(true)
                    .data(formData)
                    .method(Connection.Method.POST)
                    .userAgent(USER_AGENT)
                    .execute();

            System.out.println(homePage.statusCode());
            System.out.println(homePage.parse());


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

    }
}

Poniżej to co mam w konsoli:
200

<html> <head></head> <body> {"login":"failed","error":"Spróbuj ponownie.","requiredCaptcha":false,"siteKey":"6LedmV4UAAAAAEZG_5DMB3c-8NJLLTolTMTksHA1","additionalInfo":null} </body> </html>

Dane do formData wziąłem z parametrów żądania. Kod się wykonuję, dostaję odpowiedź ze strony 200. Problem w tym, że LOGIN ACTION URL to jest json. Jeśli próbuję zmienić to na url, np ze statusu 302 (drugi url na zdjęciu),lub jakikolwiek, który jest typem HTML, to w konsoli mam błąd 403. Nie potrafię wykombinować co dalej. Program ma mi pozwalać na zebranie wszystkich div o jednej i tej samej klasie na podstronie.

0

Udało mi się zalogować na stronie przy użyciu JSONa, gdyby ktoś potrzebował.

public class MyBenefit {
    final static String USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15";
    final static String LOGIN_FORM_URL = "https://system.mybenefit.pl/mybenefit/login.html";
    final static String LOGIN_ACTION_URL = "https://system.mybenefit.pl/mybenefit/login/by_email";
    final static String URL = "https://system.mybenefit.pl/mybenefit/benefit-login-dispatcher.html";
    final static String URLQUERY = "https://system.mybenefit.pl/mybenefit/global-search.html?query=";
    final static String USERNAME = "xxx";
    final static String PASSWORD = "xxx";

    public static void main(String[] args) {

        try {
            Connection.Response loginForm = Jsoup.connect(LOGIN_FORM_URL)
                    .method(Connection.Method.GET)
                    .userAgent(USER_AGENT)
                    .execute();

            //here I create json, because json is required to login
            JsonBuilderFactory jsonBuilderFactory = Json.createBuilderFactory(Collections.EMPTY_MAP);
            JsonObject jsonObject = jsonBuilderFactory.createObjectBuilder()
                    .add("password", PASSWORD)
                    .add("captcha", "")
                    .add("lang", "pl")
                    .add("email", USERNAME).build();


            HashMap<String, String> cookies = new HashMap<>(loginForm.cookies());

            Connection.Response homePage = Jsoup.connect(LOGIN_ACTION_URL)
                    .cookies(cookies)
                    .ignoreContentType(true)
                    .requestBody(jsonObject.toString())
                    .method(Connection.Method.POST)
                    .userAgent(USER_AGENT)
                    .execute();

            //here I get cookie after logg
            String sessionID = homePage.cookie("BENEFIT_SESSIONID");

            //this connection is working
            Connection.Response afterLogg = Jsoup.connect(URL)
                    .cookie("BENEFIT_SESSIONID", sessionID)
                    .execute();

            Document document = afterLogg.parse();

            //this connection is NOT workingg good, I am not logged on website
            Connection.Response test = Jsoup.connect(URLQUERY)
                    .cookie("BENEFIT_SESSIONID", sessionID)
                    .execute();

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


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

Teraz pytanie: dlaczego nie mogę się "zalogować' na wszystkie podstrony (w tym przypadku Connection test)?

1 użytkowników online, w tym zalogowanych: 0, gości: 1