Трудно сказать без реального логина и пароля, чтобы проверить, что там происходит, поэтому мне придется угадывать.Несколько замечаний:
Ввод с именем пользователя имеет имя Username
, но вы устанавливаете formData с помощью username
.Это может вызвать проблемы.
Форма входа имеет несколько входов, но вы только вводите имя пользователя, пароль и токен.Это может вызвать проблемы.Вы должны всегда включать все поля, поэтому вам не хватает:
String returnUrl = loginDoc.select("input[name=ReturnUrl]").first().attr("value");
formData.put("ReturnUrl", returnUrl);
formData.put("RememberLogin", "false");
formData.put("button", "login");
Для отладчика пользовательского браузера всегда полезно посмотреть, какие данные действительно отправляются:
Если это работает, это не проблема, но мне не нравится, как вы получаете токен.Вместо:
String authToken = loginDoc.select("#form > input[type=hidden]:nth-child(8)").first().attr("value");
Вы можете просто использовать:
String authToken = loginDoc.select("input[name=__RequestVerificationToken]").first().attr("value");
Это может быть самым важным.Я ожидаю, что есть страница, которая перенаправляет ваш браузер на URL, определенный в
ReturnUrl
.Jsoup не может обрабатывать перенаправления JavaScript, поэтому вы должны запросить эту страницу вручную.На самом деле это то, что ваш браузер будет делать в любом случае - сделать еще один запрос с последними куки.Вы на правильном пути, поэтому в конце вашего кода вы должны дополнительно получить нужную страницу с полученными файлами cookie:
cookies.putAll(homePage.cookies());// get the cookies after successful login
Connection.Response finalPage = Jsoup.connect(returnUrl) //this should be the URL of the page you want to visit in the first place
.cookies(cookies)
.userAgent(USER_AGENT)
.execute();
РЕДАКТИРОВАТЬ: О, это действительно правильные учетные данные.Но я вижу, что на вкладке Сеть отладчика Chrome происходит больше перенаправлений.Это сложно, так как части нового URL генерируются Javascript.Чтобы преодолеть ограничения Jsoup, попробуйте использовать Selenium Webdriver.