[英]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。 當花費太多時間連接URL時,與此jsoup相關的操作還會引發超時錯誤。 為此,我已經放置了.timeout(100 * 1000)選項。 但是,我想知道如果對當前URL的嘗試花費的時間太長,是否可以傳遞到另一個URL?
提前致謝。
我相信您在這里正在尋找一種try-catch
機制。
用try
子句包圍Jsoup.connect
部分,然后在catch
子句中優雅地處理異常,在您的情況下,這些異常將繼續到下一個循環。
要跳過當前時間太長,只需將timeout()
值設置為所需的等待時間,如果超過該時間,則會拋出超時異常,再次由catch
子句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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.