当我通过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的方法,如果当前的尝试需要太长时间?
提前致谢。
答案 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
}
}