如何使用Jsoup跟踪404的重定向

时间:2015-11-18 00:54:45

标签: java http jsoup

如果你试图找到一个不存在的tumblr页面,我想抓住重定向的tumblr站点。如果我将URL放在浏览器中,我会进入该重定向网站。然而,Jsoup只是给了一个" HTTP错误提取URL。状态= 404"错误。有什么建议吗?

String userAgent = "Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6";
     Document doc = Jsoup.connect("http://www.faszokvagyunk.tumblr.com").userAgent(userAgent).followRedirects(true).get();

谢谢。

1 个答案:

答案 0 :(得分:0)

你的代码似乎处理其他类型的重定向就好了,但是tumblr会得到一个导致404状态的404页面,例外情况可能有很多原因:

  • 重定向可能根本不会发生
  • Tumblr以奇怪的方式重定向
  • Tumblr不必要的返回404导致异常
  • 其他可能性

我不知道这个解决方案是否可以帮助你,但是,你实际上可以通过将方法链接如下来指示你的JSOUP连接忽略HttpErrors(这至少允许你验证http错误):

Document doc =  Jsoup.connect("http://oddhouredproductivity.tumblr.com/tagged/tips").userAgent(userAgent).followRedirects(true).ignoreHttpErrors(true).get();

ignoreHttpErrors 指示连接在遇到404,500等错误状态代码时不会抛出Http错误。

  

连接ignoreHttpErrors(boolean ignoreHttpErrors)

     

配置   连接到发生HTTP错误时不抛出异常。 (4xx -   5xx,例如404或500)。默认情况下这是假的; IOException是   如果遇到错误则抛出。如果设置为true,则响应为   填充错误正文,状态消息将反映出来   错误。

     

参数:ignoreHttpErrors - - 如果HTTP错误应该为false(默认值)   被忽略了。

     

返回:此连接,用于链接

如果将ignoreHttpErrors设置为true,那么您将获得Document。如果没有,那么Doc​​ument将为null。

我还遇到了这个site,它可能实际上展示了实际的tumblr重定向。您可能希望使用该页面中的URL来进行测试,因为它们是正确的tumblr重定向。如果您查看此页面的检索文档,那么您将看到一个JavaScript直接函数,该函数在3秒后触发,如下所示:

//redirect to new blog
  setTimeout( redirectTumblr, 3000 );

  function redirectTumblr() {
    location.replace('http://oddhour.tumblr.com' + location.pathname);
  }

当我连接到您在问题中提供的URL时。我看到404页面,并且Document by connection中返回的404页面的内容不包含重定向的迹象(就像其他页面一样)。