Jsoup Cookies для очистки HTTPS
Я экспериментирую с этим сайтом, чтобы собрать свое имя пользователя на странице приветствия, чтобы узнать Jsoup и Android. Используя следующий код
Connection.Response res = Jsoup.connect("http://www.mikeportnoy.com/forum/login.aspx")
.data("ctl00$ContentPlaceHolder1$ctl00$Login1$UserName", "username", "ctl00$ContentPlaceHolder1$ctl00$Login1$Password", "password")
.method(Method.POST)
.execute();
String sessionId = res.cookie(".ASPXAUTH");
Document doc2 = Jsoup.connect("http://www.mikeportnoy.com/forum/default.aspx")
.cookie(".ASPXAUTH", sessionId)
.get();
Мой файл cookie (.ASPXAUTH) всегда заканчивается NULL. Если я удалю этот файл cookie в веб-браузере, я потеряю соединение. Поэтому я уверен, что это правильный файл cookie. Кроме того, если я изменю код
.cookie(".ASPXAUTH", "jkaldfjjfasldjf") Using the correct values of course
Я могу очистить свое имя пользователя на этой странице. Это также заставляет меня думать, что у меня есть правильный cookie. Итак, как получилось, что мой cookie появился Null? Неверные поля имени пользователя и пароля? Что-то другое?
Спасибо.
Ответы
Ответ 1
Я знаю, что я немного опоздал на 10 месяцев. Но хорошим вариантом использования Jsoup является использование этой простой частичной копии кода:
//This will get you the response.
Response res = Jsoup
.connect("url")
.data("loginField", "[email protected]", "passField", "pass1234")
.method(Method.POST)
.execute();
//This will get you cookies
Map<String, String> cookies = res.cookies();
//And this is the easieste way I've found to remain in session
Documente doc = Jsoup.connect("url").cookies(cookies).get();
Хотя у меня все еще есть проблемы с подключением к НЕКОТОРЫМ веб-сайтам, я подключаюсь ко многим из них с одним и тем же основным кодом. О, и до того, как я забуду. Что я понял, моя проблема в том, что это SSL-сертификаты. Вы должны правильно управлять ими так, как я еще не совсем понял.
Ответ 2
Я всегда делаю это в два этапа (как обычный человек),
- Прочитайте страницу входа (через GET, прочитайте файлы cookie).
- Отправить форму и файлы cookie (по почте, без манипуляции с файлами cookie)
Пример:
Connection.Response response = Jsoup.connect("http://www.mikeportnoy.com/forum/login.aspx")
.method(Connection.Method.GET)
.execute();
response = Jsoup.connect("http://www.mikeportnoy.com/forum/login.aspx")
.data("ctl00$ContentPlaceHolder1$ctl00$Login1$UserName", "username")
.data("ctl00$ContentPlaceHolder1$ctl00$Login1$Password", "password")
.cookies(response.cookies())
.method(Connection.Method.POST)
.execute();
Document homePage = Jsoup.connect("http://www.mikeportnoy.com/forum/default.aspx")
.cookies(response.cookies())
.get();
И всегда устанавливайте файлы cookie из запроса previuos для следующего использования
.cookies(response.cookies())
SSL здесь не важен. Если у вас возникли проблемы с certifcates, тогда выполните этот метод для игнорирования SSL.
public static void trustEveryone() {
try {
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, new X509TrustManager[]{new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { }
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { }
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}}, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
} catch (Exception e) { // should never happen
e.printStackTrace();
}
}
Ответ 3
Что делать, если вы попытаетесь извлечь и передать все файлы cookie, не предполагая ничего подобного: Отправка запроса POST с именем пользователя и паролем и сохранение файла cookie сеанса
Если у вас все еще есть проблемы, попробуйте: Проблемы с передачей файлов cookie в GET-запрос (после POST)