Вход в систему и навигация с помощью Jsoup - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь войти на веб-сайт с помощью JSoup, моя цель - очистить некоторые данные с веб-сайта, но у меня возникли некоторые проблемы с входом / навигацией.

См. Код ниже, чтобы узнать, как кодв настоящее время выглядит так.

    try {
        Connection.Response response = Jsoup.connect("https://app.northpass.com/login")
                .method(Connection.Method.GET)
                .execute();

        response = Jsoup.connect("https://app.northpass.com/login")
                .data("educator[email]", "email123")
                .data("educator[password]", "password123")
                .cookies(response.cookies())
                .method(Connection.Method.POST)
                .execute();

        // Go to new page
        Document coursePage = Jsoup.connect("https://app.northpass.com/course")
                .cookies(response.cookies())
                .get();

        System.out.println(groupPage.title());

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

Я также попытался добавить

.data("commit", "Log in")

и

.userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")

без какого-либо успеха.

Ошибка Iget выглядит следующим образом:

org.jsoup.HttpStatusException: HTTP error fetching URL. Status=500, URL=https://app.northpass.com/login

Из того, что я прочитал в других темах, люди предлагают использовать userAgent (который, как уже было сказано выше, я уже пробовал).Заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 06 декабря 2018

Если вы посмотрите на сетевой трафик при попытке входа в браузер, то увидите, что отправляется дополнительный элемент данных: authenticity_token.Это скрытое поле в форме.

Затем вам потребуется извлечь его из исходного ответа и отправить его с запросом POST:

try {
    Connection.Response response = Jsoup.connect("https://app.northpass.com/login")
            .method(Connection.Method.GET)
            .execute();

    //I can't test this but will be something like
    //see https://jsoup.org/cookbook/extracting-data/selector-syntax
    Document document = response.parse();
    String token = document.select("input[hidden]").first().val();

    response = Jsoup.connect("https://app.northpass.com/login")
            .data("educator[email]", "email123")
            .data("educator[password]", "password123")
            .data("authenticity_token", token)
            .cookies(response.cookies())
            .method(Connection.Method.POST)
            .execute();

    // Go to new page
    Document coursePage = Jsoup.connect("https://app.northpass.com/course")
            .cookies(response.cookies())
            .get();

    System.out.println(groupPage.title());

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