2013-03-09 66 views
2

如果我嘗試從該域檢索Document.baseUri()的URL的 -Jsoup Document.baseUri()問題

http://www.deliciousmagazine.co.uk/articles/mid-week-meals

返回http://www.deliciousmagazine.co.uk

對於其他URL,Document.baseUri()返回整個URL。

E.g.

https://stackoverflow.com/about

將返回

https://stackoverflow.com/about

我注意到的唯一事情就是HTML響應返回一個帶有以下信息的標籤。

<base href="http://www.deliciousmagazine.co.uk/" /> 

這是我能想到的唯一導致這個問題的事情。即使這個元素存在,如果我想要整個URL,該怎麼辦?我可以通過什麼方法調用Document來檢索它?

示例代碼

Document doc = null; 
try { 
    doc = Jsoup.connect(url).userAgent("Mozilla").get(); 
} catch (IOException e) { 
     e.printStackTrace(); 
} 
System.out.println(doc.baseUri()); 
+1

我看着源和HTMLTreeBuilder類設置的基本URI與它在文件中遇到的第元素的href。我建議在Document上使用另一種方法來返回從中解析HTML的Document的URI。 Document.getSourceUri()或類似的。 – user1796571 2013-03-09 15:43:59

回答

0

基URI是在源(<a href="/foo">)到絕對URL解析相對URL的點。文檔可以使用元標記來使用基本URI;如果未設置,則默認爲提取的位置。

您需要獲取源URL的用途是什麼?你不知道它是什麼(因爲你是怎麼得到它的)?

+2

在我們生活的縮短的URL和重定向的世界中,不幸的是,我們最初開始使用的可能不是提供資源的URL。如果必須維護一個持久化的已解析URL的索引,並且兩個不同的縮短的URL指向相同的資源,那麼開發人員在導航Document對象時如何知道真正的端點是什麼。說得通? – user1796571 2013-03-15 23:57:25

+0

好的,有道理。我想你可以跟蹤jsoup.connection內發生的重定向。但是爲了方便,具有特定的document.location()屬性也會有幫助。 – 2013-03-16 05:49:32

+0

我同意。在此期間,我冒昧地在Document上創建了一個方法sourceUri()。我會留意即將發佈的版本,以瞭解何時可以使用這種方法。 – user1796571 2013-03-16 13:43:56

0

Response對象有一個url()方法,它應該給你最終的url。所以,你可以不喜歡

String url = "http://t.co/i5dE1K4vSs"; 
Response response = Jsoup.connect(url).followRedirects(true).execute(); 
System.out.println(response.url());