可以jsoup处理元刷新重定向

我有一个问题,使用jsoup,我想要做的是从url获取一个文件,它将重定向到另一个基于元刷新url的url,这是不起作用,清楚地解释我是否输入了一个名为http://的网站urlwww.amerisourcebergendrug.com将根据元刷新url自动重定向到http://www.amerisourcebergendrug.com/abcdrug/但我的jsoup仍然坚持http://www.amerisourcebergendrug.com而不是重定向和取自http://www.amerisourcebergendrug.com/abcdrug/

Document doc = Jsoup.connect("http://www.amerisourcebergendrug.com").get(); 

我也试过用,

 Document doc = Jsoup.connect("http://www.amerisourcebergendrug.com").followRedirects(true).get(); 

但两者都不起作用

对此有何解决方法?

更新:页面可能使用元刷新重定向方法

更新(不区分大小写且具有良好的容错能力)

  • 根据规范 (几乎)解析内容
  • 应该使用第一个成功解析的内容元数据

 public static void main(String[] args) throws Exception { URI uri = URI.create("http://www.amerisourcebergendrug.com"); Document d = Jsoup.connect(uri.toString()).get(); for (Element refresh : d.select("html head meta[http-equiv=refresh]")) { Matcher m = Pattern.compile("(?si)\\d+;\\s*url=(.+)|\\d+") .matcher(refresh.attr("content")); // find the first one that is valid if (m.matches()) { if (m.group(1) != null) d = Jsoup.connect(uri.resolve(m.group(1)).toString()).get(); break; } } } 

输出正确:

 http://www.amerisourcebergendrug.com/abcdrug/ 

老答案:

你确定它不起作用吗? 为了我:

 System.out.println(Jsoup.connect("http://www.ibm.com").get().baseUri()); 

..输出http://www.ibm.com/us/en/正确..

有更好的error handling和区分大小写问题

 try { Document doc = Jsoup.connect("http://www.ibm.com").get(); Elements meta = doc.select("html head meta"); if (meta != null) { String lvHttpEquiv = meta.attr("http-equiv"); if (lvHttpEquiv != null && lvHttpEquiv.toLowerCase().contains("refresh")) { String lvContent = meta.attr("content"); if (lvContent != null) { String[] lvContentArray = lvContent.split("="); if (lvContentArray.length > 1) doc = Jsoup.connect(lvContentArray[1]).get(); } } } // get page title return doc.title(); } catch (IOException e) { e.printStackTrace(); }