尽管状态代码检查,jsoup仍会抛出204状态

时间:2015-11-06 14:43:31

标签: java jsoup httpurlconnection

当我通过jsoup连接到网址时。以下是我的代码片段:

  for (int j = 0; j < unq_urls.size(); j++) {

      Response response2 = Jsoup.connect(unq_urls.get(j))
             .userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
             .timeout(100*1000)
             .ignoreContentType(true)
             .execute();

      if (response2.statusCode() == 200) {
...}

}

执行连接时,jsoup会抛出以下错误:

org.jsoup.HttpStatusException: HTTP error fetching URL. Status=204, URL=https://www.google.com/gen_204?reason=EmptyURL
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:459)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:475)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:475)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:434)
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:181)
    at cseapiandparsing.CSE_Author_Name_Dis.<init>(CSE_Author_Name_Dis.java:187)
    at cseapiandparsing.CSE_Author_Name_Dis.main(CSE_Author_Name_Dis.java:263)

我怎样才能克服这一点?我的意思是,如果jsoup无法连接到特定的URL,我希望jsoup传递另一个URL。与此相关的jsoup在连接URL需要太多时间时也会引发超时错误。为此,我已经放了.timeout(100 * 1000)选项。但是,我想知道是否有一种传递到另一个URL的方法,如果当前的尝试需要太长时间?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我相信你在这里寻找try-catch机制。

使用Jsoup.connect子句围绕try部分,然后在catch子句中优雅地处理异常,在您的情况下继续到下一循环。

跳过当前的那个,如果花费的时间太长,只需将timeout()值设置为您想要的等待时间,如果超过该时间段,它将抛出超时异常,这将再次被catch条款捕获。 试试我在下面发布的代码:

for (int j = 0; j < unq_urls.size(); j++) {
  try{
      Response response2 = Jsoup.connect(unq_urls.get(j))
         .userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
         .timeout(100*1000)
         .ignoreContentType(true)
         .execute();
  } catch(Exception e) {
      continue; //continue to the next loop if exception occurs
  }
}