2013-03-27 79 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