我在一家名为Kabum的网店中遇到了一些网址。
网址为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 :(得分:2)
非常有趣。
是的,以下行:<meta http-equiv="refresh" content="0;url=kabum.com.br/cgi-local/kabum3/produtos/…; />
告诉浏览器刷新当前网址。
所以看起来页面告诉浏览器不断刷新页面,直到服务器满足它所寻找的任何标准。
您必须弄清楚服务器正在寻找的标准。首先要检查的可能是(1)jsoup设置的重定向限制(如果它具有“跟随重定向”功能并且可以理解meta
标记),以及(2)cookie。
答案 1 :(得分:2)
您需要使用Cookie重新发送请求。该网站正在返回一个会话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。