2016-09-19 108 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错误上抛出异常。 –