尽管状态代码检查,jsoup 仍抛出 204 状态
jsoup throws 204 status despite a status code check
虽然我通过 jsoup 连接到 url。这是我的代码片段:
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,我希望它传递另一个 URL。与此相关的jsoup在连接URL花费太多时间时也会抛出超时错误。为此,我已经设置了 .timeout(100*1000) 选项。但是,我想知道如果当前的尝试时间太长,是否有一种方法可以传递给另一个 URL?
提前致谢。
我相信您正在寻找一种 try-catch
机制。
用 try
子句包围 Jsoup.connect
部分,然后在你的 catch
子句中优雅地处理异常,在你的情况下,这将是 continuing 进入下一个循环。
要跳过当前的,如果它花费的时间太长,只需将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
}
}
虽然我通过 jsoup 连接到 url。这是我的代码片段:
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,我希望它传递另一个 URL。与此相关的jsoup在连接URL花费太多时间时也会抛出超时错误。为此,我已经设置了 .timeout(100*1000) 选项。但是,我想知道如果当前的尝试时间太长,是否有一种方法可以传递给另一个 URL?
提前致谢。
我相信您正在寻找一种 try-catch
机制。
用 try
子句包围 Jsoup.connect
部分,然后在你的 catch
子句中优雅地处理异常,在你的情况下,这将是 continuing 进入下一个循环。
要跳过当前的,如果它花费的时间太长,只需将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
}
}