0

我想从一个非常相似的元刷新重定向中获取一个 HTML 页面,因为有问题jsoup 可以处理元刷新重定向

但我无法让它工作。我想在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”并按 Enter。

但是即使在提取刷新 URL 并进行第二次连接后,我仍然得到临时登陆页面的内容,可以在 body 的 prinln 中看到。

那么这里出了什么问题呢?

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

4

1 回答 1

1

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

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

您只需要一个带有会话 ID 的 cookie “sid”,Synchronkartei 为您提供。之后https://www.synchronkartei.de/index.php?action=search,无论您的推荐人如何,直接请求都会为您提供结果。

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

丰子

于 2013-05-03T09:38:57.537 回答