Java: Обработка файлов cookie при входе в систему с помощью POST - PullRequest
2 голосов
/ 15 июня 2010

У меня проблемы с входом на любой сайт на Java.Я использую запрос POST URLconnection по умолчанию, но я не уверен, как правильно обрабатывать файлы cookie.Я попробовал это руководство: http://www.hccp.org/java-net-cookie-how-to.html Но не смог заставить его работать.Я пытался в основном уже несколько дней, и мне действительно нужна помощь, если кто-то захочет мне помочь.

Мне, вероятно, скажут, что это грязно и что я должен использовать пользовательскую библиотеку, предназначенную для этого.Я попытался загрузить один, но не был уверен, как его настроить и работать.Я часами пробовал разные вещи, и это просто не сработало.Я бы предпочел сделать это с помощью стандартного URL-соединения, но если кто-нибудь может помочь мне заставить работать другую библиотеку, которая будет лучше для этого, это было бы также здорово.чтобы я мог учиться.Что мне нужно, это: POST данные для входа на сайт -> Получить и сохранить cookie с сайта -> использовать cookie для следующих запросов URL-соединения, чтобы получить зарегистрированную версию сайта.

Может ли кто-нибудь помочь мне с этим?Было бы чрезвычайно признателен.Это действительно много значит.Если кто-то хочет помочь мне в жизни, пожалуйста, оставьте адрес мессенджера.Большое спасибо за ваше время.

1 Ответ

5 голосов
/ 17 июня 2010

У меня работает этот код:

Получение формы входа в систему (в моем случае cookie-файл фактически устанавливается при получении страницы входа в систему)

    URL url = new URL(formPage);
    URLConnection conn = url.openConnection();

    String cookieHeader = conn.getHeaderFields().get("Set-Cookie").get(0);
    Matcher m = JSESSION_PATTERN.matcher(cookieHeader);
    m.find();
    jSessionId = m.group(1);

Мне также нужно получить значение csrf, но сейчас я его опущу.

Затем я авторизируюсь, выполнив:

    URL url = new URL(formPage);

    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    conn.setRequestProperty("Cookie", "JSESSIONID=" + encode(jSessionId, "UTF-8")); 

    conn.setRequestMethod("POST");
    conn.setDoOutput(true);
    conn.setDoInput(true);

    DataOutputStream out = new DataOutputStream(conn.getOutputStream());
    out.writeBytes(String.format("_csrf_token=%s&xyz=%s&zyx=%s",
            encode(csrfToken, "UTF-8"),
            encode(USER, "UTF-8"),
            encode(PASS, "UTF-8")));

    out.close();

    // I have absolutely no idea why this is needed.
    conn.getInputStream().close();


    String cookieHeader = conn.getHeaderFields().get("Set-Cookie").get(0);
    Matcher m = JSESSION_PATTERN.matcher(cookieHeader);
    m.find();
    jSessionId = m.group(1);

Затем я могу получать и обрабатывать страницы, используя

    URL url = new URL(thePage);
    URLConnection conn = url.openConnection();

    conn.setRequestProperty("Cookie", "JSESSIONID=" + encode(jSessionId, "UTF-8")); 

    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String str;
    while ((str = in.readLine()) != null) {
        // process str...

Надеюсь, это поможет!

...