Проблемы с отправкой формы входа в систему с помощью Jsoup

По какой-то причине этот код не пускает меня на сайт, когда я использую правильную информацию для входа. System.out.println публикует код страницы входа, указывая, что мой код не работает. Может кто-нибудь сказать мне, что я забыл или что с этим не так?

public void connect() {

try {
Connection.Response loginForm = Jsoup.connect("https://www.capitaliq.com/CIQDotNet/Login.aspx/login.php")
.method(Connection.Method.GET)
.execute();

org.jsoup.nodes.Document document = Jsoup.connect("https://www.capitaliq.com/CIQDotNet/Login.aspx/authentication.php")
.data("cookieexists", "false")
.data("username", "myUsername")
.data("password", "myPassword")
.cookies(loginForm.cookies())
.post();
System.out.println(document);
} catch (IOException ex) {
Logger.getLogger(WebCrawler.class.getName()).log(Level.SEVERE, null, ex);
}
}

1

Решение

Кроме username, password и cookies, сайт требует два дополнительных значения для входа в систему — VIEWSTATE а также EVENTVALIDATION,
Вы можете получить их по ответу первого Get запрос, как это —

Document doc = loginForm.parse();
Element e = doc.select("input[id=__VIEWSTATE]").first();
String viewState = e.attr("value");
e = doc.select("input[id=__EVENTVALIDATION]").first();
String eventValidation = e.attr("value");

И добавить его после password (порядок не имеет значения) —

org.jsoup.nodes.Document document = (org.jsoup.nodes.Document) Jsoup.connect("https://www.capitaliq.com/CIQDotNet/Login.aspx/authentication.php").userAgent("Mozilla/5.0")
.data("myLogin$myUsername", "MyUsername")
.data("myLogin$myPassword, "MyPassword")
.data("myLogin$myLoginButton.x", "22")
.data("myLogin$myLoginButton.y", "8")
.data("__VIEWSTATE", viewState)
.data("__EVENTVALIDATION", eventValidation)
.cookies(loginForm.cookies())
.post();

Я бы также добавил userAgent поле для обоих запросов — некоторые сайты тестируют его и отправляют разные страницы разным клиентам, поэтому, если вы хотите получить тот же ответ, что и в браузере, добавьте в запросы .userAgent("Mozilla/5.0") (или какой бы браузер вы не использовали).

редактировать
userNameимя поля myLogin$myUsernameпароль myLogin$myPassword и Post Запрос также содержит данные о кнопке входа. Я не могу проверить это, потому что у меня нет пользователя на этом сайте, но я верю, что он будет работать. Надеюсь, это решит вашу проблему.

РЕДАКТИРОВАТЬ 2
Чтобы включить remember me поле во время входа в систему, добавьте эту строку в post запрос:

.data("myLogin$myEnableAutoLogin", "on")
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]