2012-03-12 8 views
1

(OAI)サーバーから受信したxmlを解析するためにSaxParserを使用しています。このxmlは別のxmlなどを取得するためにサーバーから私に別のリクエストを生成することができます。SaxParser.parseでレスポンスコードを捕捉する方法

これらの後続の要求をDoS攻撃として理解し、「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

例外はXMLとして返され、解析しない限り、Web例外を「キャッチ」したい最後の場所です。 HTTPリクエストレベルで例外をキャッチしようとしましたか?ロジックは一般にHTTPレスポンスの行に沿って流れます!= 200 - >何かを処理してください。 Else - >応答を解析します。あなたは、HTTPレスポンスコードを調べることができるだけでなく、HTTPリクエストから返されたヘッダを調べるだけで、HTTPレスポンスコードをチェックできるはずです。 – FloppyDisk

答えて

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); 
} 
関連する問題