2013-03-27 70 views
0

我想从元刷新重定向中获取HTML页面,与问题can jsoup handle meta refresh redirect非常相似。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”并按回车。

但即使在提取刷新网址并进行第二次连接之后,我仍然可以看到临时着陆页的内容,这可以在正文的主题中看到。

那么这里出了什么问题?

作为说明,站点synchronkartei.de始终重定向到HTTPS。而且由于它使用StartCom的证书,所以java会抱怨证书路径。要让上面的代码片段工作,有必要使用带有正确证书的VM参数-Djavax.net.ssl.trustStore=<path-to-keystore>

回答

1

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

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

所有你需要的是一个cookie“sid”与会话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

+0

从昨天开始,Synchronkartei支持没有cookie或重定向的'/?q = {searchTerm}'。 – Funzi 2013-05-05 15:16:10

+0

感谢您的帮助。这样做与cookie的作品。但是我有一个关于'/?q = {searchTerm}'方法的问题。我不习惯OpenSearchDescriptions,所以对于可能的愚蠢问题感到抱歉。是否只能搜索单个字符串,或者是否有办法更多地筛选结果以获取(例如,只有具有给定搜索字符串的actor)(如我的原始帖子中的示例)? – radlan 2013-05-07 21:00:53

+0

Hi radlan,在使用/?q = {searchTerm}时,目前没有可能过滤演员或电影的结果。但是如果你使用/search.php?cat={category}&search={searchterm},你可以用1(全部),2(配音演员),3(电影演员),4(电影),5(电视系列)和6(电影参与)。 – Funzi 2013-05-29 16:03:33