Как управлять файлами cookie с помощью Jsoup? - PullRequest
3 голосов
/ 30 января 2012

Есть ли в Jsoup простой менеджер куки, который хранит куки хостом?пример в этой теме совершенно отсутствует.

Ответы [ 2 ]

9 голосов
/ 31 января 2012

Я не нашел стандартного решения, которое работает с Jsoup. Вот моя простая обработка файлов cookie с использованием HashMap. Возможно, ему не хватает некоторых функций, но я надеюсь, что он будет работать достаточно хорошо для моего основного сканера:

private static HashMap<String, HashMap<String, String>> host2cookies = new HashMap<String, HashMap<String, String>>();

public static String[] DownloadPage(URL url) throws Exception
{
    Connection con = Jsoup.connect(url.toString()).timeout(600000);
    loadCookiesByHost(url, con);


    Document doc = con.get();
    url = con.request().url();

    storeCookiesByHost(url, con);

    return new String[]{url.toString(), doc.html()};
}

private static void loadCookiesByHost(URL url, Connection con) {
    try {
        String host = url.getHost();
        if (host2cookies.containsKey(host)) {
            HashMap<String, String> cookies = host2cookies.get(host);
            for (Entry<String, String> cookie : cookies.entrySet()) {
                con.cookie(cookie.getKey(), cookie.getValue());
            }
        }
    } catch (Throwable t) {
        // MTMT move to log
        System.err.println(t.toString()+":: Error loading cookies to: " + url);
    }
}

private static void storeCookiesByHost(URL url, Connection con) {
        try {
            String host = url.getHost();
            HashMap<String, String> cookies = host2cookies.get(host);
            if (cookies == null) {
                cookies = new HashMap<String, String>();
                host2cookies.put(host, cookies);
            }
            cookies.putAll(con.response().cookies());
        } catch (Throwable t) {
            // MTMT move to log
            System.err.println(t.toString()+":: Error saving cookies from: " + url);
        }    
}   
2 голосов
/ 30 января 2012

Класс Connection.Base содержит все, что вам нужно знать о том, как jsoup работает с файлами cookie.

По сути, это позволит вам получать и устанавливать их для каждого соединения, но помимо этого, вы сами должны "управлять" ими.

...