2012-01-30 3 views

답변

2

Connection.Base 클래스에는 jsoup가 쿠키를 처리하는 방법에 대해 알아야 할 모든 것이 있습니다.

본질적으로, 그것은 당신이 각 연결에서 그들을 얻을 수 있도록 해줄 것입니다. 그러나 그것을 넘어서는 것은 당신이 그것들을 "관리"하는 것 이상의 것입니다.

+0

예제가 있습니까? – Dejell

+0

API가 명확합니다. 그것을 사용하여 찔러, 당신이 붙어 있다면 어떤 포인터를 드리겠습니다. – cdeszaq

8

Jsoup에서 작동하는 표준 솔루션을 찾지 못했습니다. 다음은 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); 
     }  
} 
+0

loadCookiesByHost (..)에서 쿠키의 항목을 반복하는 대신 [Connection # cookies (cookies)] (http://jsoup.org/apidocs/org/jsoup/Connection)을 사용할 수 있습니다. html # cookies-java.util.Map-) 맵에있는 모든 쿠키를 연결에 추가합니다. – Vulcan

관련 문제