2012-09-21 62 views
3

我試圖將cookie保存在使用SSL但始終返回NULL的URL中。如何檢索https連接上的cookie?

private Map<String, String> cookies = new HashMap<String, String>(); 

    private Document get(String url) throws IOException { 
      Connection connection = Jsoup.connect(url); 
      for (Entry<String, String> cookie : cookies.entrySet()) { 
       connection.cookie(cookie.getKey(), cookie.getValue()); 
      } 
      Response response = connection.execute(); 
      cookies.putAll(response.cookies()); 
      return response.parse(); 
     } 

    private void buscaJuizado(List<Movimentacao> movimentacoes) { 
      try { 
       Connection.Response res = Jsoup       .connect("https://projudi.tjpi.jus.br/projudi/publico/buscas/ProcessosParte?publico=true") 
    .userAgent("Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2") 
    .timeout(0) 
    .response(); 
    cookies = res.cookies(); 
    Document doc = get("https://projudi.tjpi.jus.br/projudi/listagens/DadosProcesso? numeroProcesso=" + campo); 
    System.out.println(doc.body()); 
    } catch (IOException ex) { 
    Logger.getLogger(ConsultaProcessoTJPi.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

我嘗試捕獲cookie的第一個連接,但總是將它們設置爲NULL。我認爲這可能是一些Cois,因爲安全的連接(HTTPS) 任何想法?

回答

1

該問題不是HTTPS。這個問題或多或少是一個小錯誤。

要解決您的問題,您可以簡單地將.response()替換爲.execute()。像這樣,

private void buscaJuizado(List<Movimentacao> movimentacoes) { 
    try { 
    Connection.Response res = Jsoup 
     .connect("https://projudi.tjpi.jus.br/projudi/publico/buscas/ProcessosParte?publico=true") 
     .userAgent("Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2") 
     .timeout(0) 
     .execute(); // changed fron response() 
    cookies = res.cookies(); 
    Document doc = get("https://projudi.tjpi.jus.br/projudi/listagens/DadosProcesso?numeroProcesso="+campo); 
    System.out.println(doc.body()); 
    } catch (IOException ex) { 
    Logger.getLogger(ConsultaProcessoTJPi.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 


總的來說,你必須確保你第一次執行請求。
調用.response()是有用抓住Connection.Response對象後的請求已經被執行。如果你沒有執行請求,顯然Connection.Response對象不會很有用。

事實上,如果你要嘗試,你會收到以下異常指示問題未執行響應調用res.body()

java.lang.IllegalArgumentException異常:請求必須得到響應體

+0

沒辦法之前執行(與.execute(),獲得(),或。員額()...我做到了但不成功 – user1689105