2012-03-12 49 views
1

我正在使用SaxParser解析从OAI服务器接收的xml。这个XML可以从我生成另一个请求到服务器来获得另一个XML等等。如何使用SaxParser.parse捕获(http)响应代码

某些服务器可以将这些后续请求理解为拒绝服务攻击并返回“HTTP响应代码:503”。

如何获取响应码?

这里是我使用的代码:

try 
    { 
     InputSource is = new InputSource(uri); 
     is.setEncoding("UTF-8"); 
     parser.parse(is, handler); 
     parsed = true; 
    } 
    catch (IOException ioException) 
    { 
     ...here should happen the response code handling... 

     persistError("Error(IOException) in parsing: " + ioException.getMessage()); 
    } 
    catch (SAXException saxException) 
    { 
     persistError("Error(SAXException) in parsing: " + saxException.getMessage()); 
     // we do not retry to parse if the error is a parsing error 
     retry = RETRY_FETCH_URL + 1; 
    } 
+2

解析器是您希望“捕捉”web异常的最后一个地方,除非异常以XML格式返回并且您想解析它。您是否尝试过在HTTP请求级别捕获异常?逻辑通常按照HTTP响应!= 200 - >的方式进行处理。否则 - >解析响应。您应该可以通过查看HTTP请求返回的头来检查HTTP响应代码,而不必将其解析出来。 – FloppyDisk 2012-03-12 11:41:13

回答

1

您可以调用解析器之前,请务必检查响应代码。例如:

HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); 
final int responseCode = connection.getResponseCode(); 
if (responseCode < 200 || responseCode > 299) { 
    log.info("Response " + responseCode + " opening connection to " + url); 
    return; 
} 
try (Reader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"))) { 
    InputSource is = new InputSource(reader); 
    is.setEncoding("UTF-8"); 
    parser.parse(is, handler); 
}