2016-09-19 77 views
-1

在我的Java servlet中,我想執行一些操作,具體取決於從請求返回到url的狀態代碼。jsoup statusCode將不會打印404錯誤

我的代碼如下所示:

String source = "http://urltoparse.org/name/date"; 
boolean validQuery = jsoupHandler.sourceExists(source); 

int statusCode = jsoupHandler.srcExists(source); 
response.getWriter().println("stat: " + statusCode); 

jsoupHandler:

public class JSoupHandler { 
    public int srcExists(String source) throws IOException { 
     Connection.Response resp = Jsoup.connect(source).execute(); 
     System.out.println("status" + resp.statusCode()); 
     return resp.statusCode(); 
    } 
} 

statusCode == 200,它打印在瀏覽器中

stat: 200status200在我的jsouphandler控制檯。

然而,當我把在源應該返回404,這樣的:

String source = "http://urltoparse.org/name/date2"; 

瀏覽器打印沒有和我的控制檯打印這樣的錯誤:

org.jsoup.HttpStatusException: HTTP error fetching URL. Status=404, URL=http://urltoparse.org/name/date2 

爲什麼瀏覽器和控制檯的打印語句都不打印狀態碼?我想要做類似

if (statusCode != 200) { 
//do something 
} 

但我無法進入此條件語句。

我看這個鏈接:Jsoup error handling when couldn't connect to website

,但不能讓它爲我工作。

回答

1

添加

.ignoreHttpErrors(true) 

您的要求。

見API:https://jsoup.org/apidocs/org/jsoup/Connection.html#ignoreHttpErrors-boolean-

+0

我使用Connection.Response,不Connection.Request,根據本: 「https://jsoup.org/apidocs/org/jsoup/Connection.Response.html #statusCode--'.statusCode()應該返回任何狀態碼,我不知道如果我使用Connection.Request – matcha

+0

'Jsoup.connect(source).execute();'是一個請求並且您正在存儲響應。該請求導致http錯誤,並通過設置'Jsoup.connect(source).ignoreHttpErrors(true).execute();'你告訴Jsoup在連接時忽略http錯誤,否則Jsoup會在http錯誤上拋出異常。 –