По какой-то причине этот код не пускает меня на сайт, когда я использую правильную информацию для входа. 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);
}
}
Кроме 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")
Других решений пока нет …