我想从一个非常相似的元刷新重定向中获取一个 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 参数。