2012-01-30 66 views
2

Jsoup中是否有一个简单的Cookie管理器,通过主机存储Cookie? this thread中的示例相当缺乏。如何使用Jsoup管理cookie?

+0

如何阿帕奇[HttpClient的(http://hc.apache.org/)?我一直在使用它。它使用cookies非常好。 – 2012-03-18 14:45:10

回答

2

Connection.Base类拥有关于jsoup如何处理cookie的所有知识。

本质上,它会让你获得并设置他们在每个连接,但除此之外,它是由你来“管理”他们。

+0

你有没有关于它的例子? – Dejell 2015-01-27 19:03:07

+0

API非常清晰。尝试使用它,如果您遇到困难,我很乐意为您提供任何指示。 – cdeszaq 2015-01-27 20:39:03

8

我没有找到适用于Jsoup的标准解决方案。这是我使用HashMap进行简单的cookie处理。它可能缺少了一堆功能,但我希望它会工作不够好,我的基本履带:

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); 
     }  
} 
+0

您可以使用['Connection#cookies(cookies)'](http://jsoup.org/apidocs/org/jsoup/Connection)来代替loadCookiesByHost(..)'中的'cookies'条目。 html#cookies-java.util.Map-),它将地图中的所有cookie添加到连接中。 – Vulcan 2015-12-02 02:49:20