Подтвердить что ты не робот

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? Неверные поля имени пользователя и пароля? Что-то другое?

Спасибо.

4b9b3361

Ответ 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)