Jsoup元刷新重定向

时间:2013-03-27 09:33:22

标签: java redirect refresh jsoup meta

我想从元刷新重定向中获取与问题can jsoup handle meta refresh redirect非常相似的HTML页面。

但我无法让它发挥作用。我想在http://synchronkartei.de上进行搜索。 我有以下代码:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class SynchronkarteiScraper {
  public static void main(String[] args) throws Exception{
    Document doc = Jsoup.connect("https://www.synchronkartei.de/search.php")
                                        .data("cat", "2")
                                        .data("search", "Thomas Danneberg")
                                        .data("action", "search")
                                        .followRedirects(true)
                                        .get();
    Elements meta = doc.select("html head meta");                                  
    for (final Element m : meta){
      if (m.attr("http-equiv").contains("refresh")){
        doc = Jsoup.connect(m.baseUri()+m.attr("content").split("=")[1]).get();
      }
    }

    System.out.println(doc.body().toString());
  }
}

这会进行搜索,从而导致刷新的临时站点打开真实结果页面。 这与从http://synchronkartei.de进行选择,从下拉框中选择“Sprecher”,将“Thomas Danneberg”输入文本字段并点击输入。

但即使在提取刷新网址并进行第二次连接后,我仍然会获得临时目标网页的内容,这可以在正文的原版中看到。

那么这里出了什么问题?

请注意,网站synchronkartei.de始终重定向到HTTPS。由于它使用的是StartCom的证书,因此java会抱怨证书路径。要让上面的代码段有效,必须使用具有正确证书的VM参数-Djavax.net.ssl.trustStore=<path-to-keystore>

1 个答案:

答案 0 :(得分:1)

我不得不承认,我不是Jsoup的专家,但我知道有关Synchronkartei的一些细节。

Deutsche Synchronkartei支持OpenSearchDescriptions,它在/search.xml链接。也就是说,您也可以使用https://www.synchronkartei.de/search.php?search={searchTerms}将搜索字词纳入会话。

你需要的只是一个cookie&#34; sid&#34;使用会话ID,Synchronkartei为您提供。在此之后,向https://www.synchronkartei.de/index.php?action=search的直接请求将为您提供结果,无论您的推荐人是谁。

我的意思是,首先向https://www.synchronkartei.de/search.php?search={searchTerms}https://www.synchronkartei.de/search.php?cat={Category}&search={searchTerms}&action=search发送请求(如上所述),如果HTTP结果为200,则完全忽略该结果,但保证会话cookie安全。之后,您向https://www.synchronkartei.de/index.php?action=search发出请求,该请求应为您提供完整的结果列表。

Funzi