2012-05-17 50 views
3

我在一家名爲Kabum的網上商店遇到了一些網址問題。與Firefox和其他瀏覽器相比,Jsoup獲得了不同的html

URL是http://www.kabum.com.br/cgi-local/kabum3/produtos/descricao.cgi?id=01:02:23:55:159

如果我在地址欄輸入網站,或點擊鏈接,我得到了與該產品的頁面,但如果我使用Jsoup,我得到一個頁面只有一個元刷新到相同的地址。

嘗試設置用戶代理,引用鏈接,並按照meta中的鏈接,但我得到了相同的頁面。

我的代碼是在這裏:

Document doc; 
String url = "http://www.kabum.com.br/cgi-local/kabum3/produtos/descricao.cgi?id=01:02:23:55:159"; 
try { 
    String ua = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0"; 
    String referrer = "http://www.google.com"; 
    doc = Jsoup.connect(url).timeout(20000).userAgent(ua).referrer(referrer).get(); 
    Elements meta = doc.select("html head meta"); 
    for (Iterator<Element> it = meta.iterator(); it.hasNext();) { 
     Element element = it.next(); 
     if (element.attr("http-equiv").matches("refresh")) { 
      String novaUrl = element.attr("content").replaceFirst("\\d?;url=", ""); 
      System.out.printf("redirecting to %s%n", novaUrl); 
      doc = Jsoup.connect(novaUrl).userAgent(ua).referrer(referrer).get(); 
      break; 
     } 
    } 
} catch (IOException ex) { 
    Logger.getLogger(Teste1.class.getName()).log(Level.SEVERE, null, ex); 
    return; 
} 
System.out.println(doc); 
+0

該頁面上似乎有很多的JavaScript。你是否考慮到了這一點? –

+0

我不需要JavaScript,只需要html。返回的HTML中jsoup僅此(不能格式化嗎?): Dudaskank

+0

但JavaScript可能產生很多的網頁,你正在試圖提取和看到的。如果是這樣,你可能會與jsoup運氣不佳。 –

回答

2

您需要重新發送請求與餅乾。該網站正在返回一個會話cookie,它預計會在下一個請求中看到。

String url = "http://www.kabum.com.br/cgi-local/kabum3/produtos/descricao.cgi?id=01:02:23:55:159"; 
Map<String, String> cookies = Jsoup.connect(url).execute().cookies(); 
Document document = Jsoup.connect(url).cookies(cookies).get(); 
System.out.println(document.html()); 

請注意,對於您希望在同一個會話中觸發的每個後續請求,您都應該使用相同的cookie。

+0

這工作,謝謝:) – Dudaskank

2

非常有趣。如下行:<meta http-equiv="refresh" content="0;url=kabum.com.br/cgi-local/kabum3/produtos/…; />告訴瀏覽器刷新當前的url。

因此,它看起來像頁面告訴瀏覽器不斷刷新頁面,直到服務器滿足它正在尋找的任何標準。

你必須弄清楚服務器正在尋找什麼標準。首先要檢查的可能是(1)jsoup設置的重定向限制(如果它具有「遵循重定向」功能並且能夠理解meta標記)和(2)cookie。

+0

問題是cookie,謝謝你的提示。 – Dudaskank

相關問題