3

SSLを使用するURLにCookieを保存しようとしていますが、常にNULLを返します。

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に設定されています。セキュア接続(HTTPS)のおかげでCoisかもしれないと思います。

4

1 に答える 1

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.ResponseConnection.Response

実際、res.body()実行されていない応答を呼び出そうとすると、問題を示す次の例外が発生します。

java.lang.IllegalArgumentException:応答本文を取得する前に、要求を実行する必要があります(.execute()、. get()、または.post()を使用)

于 2012-09-21T23:52:01.797 に答える