0

私はjava.net.HttpUrlConnectionを使用して、自分のサーバーにHTTPリクエストを行います。サーバーがエラーステータス(たとえば400)を返した場合、私はそれを認識しました。 HttpUrlConnectionは、エラーステータスに対応するIOExceptionをスローします。サーバによってエラー状態が返された場合、java.net.HttpUrlConnectionは常にIOExceptionをスローしますか?

私の質問はです。サーバがエラーステータス(4xx、5xx)を返した場合、HttpUrlConnectionは常にIOExceptionをスローしますか?

私はHttpUrlConnection APIの説明を見ていますが、私の質問には答えられませんでした。更新

:私のテストを参照してください。

public static void main(String[] args) { 
    try { 

     String url = "https://www.googleapis.com/oauth2/v3/userinfo?access_token=___fake_token"; 
     HttpURLConnection conn = (HttpURLConnection)new URL(url).openConnection(); 

     conn.getResponseCode(); 
     conn.getInputStream(); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
     // Print IOException: java.io.IOException: Server returned HTTP response code: 401 for URL: https://www.googleapis.com/oauth2/v3/userinfo?access_token=abc 

     // If I commented conn.getResponseCode() -> The same IOException 
    } 
} 

ありがとうございました!

+0

HTTPエラー401 - 権限がありません:無効な資格情報が原因でアクセスが拒否されました。この現象は、以下の条件に該当する場合に発生します。表示しようとするWebサイトは、Windows統合認証を使用します。 Webサイトのアプリケーションプールは、認証処理中にリサイクルされます。 –

答えて

3

getInputStream()の前にgetResponseCode()をチェックしていないと、接続エラーではなくHTTPリターンコードに問題があります。

+0

私はテストを含めました。私はgetInputStreamの前にgetResponseCodeを呼び出し、IOExceptionを取得しました。私の例を見てください! – Loc

+0

@Locどちらの場合でも 'getInputStream()'によって例外がスローされます。 'getResponseCode()'の結果を無視したため、あなたの新しい例は無益です。私が想定したように正しくプログラムしていれば、値は401であり、 'getInputStream()'をまったく呼び出そうとしていないことが分かりました。 – EJP

+0

私は今それを理解しています。ありがとうございました! – Loc

関連する問題