100

Java では、HTTP の結果が 404 の範囲の場合、このコードは例外をスローします。

URL url = new URL("http://stackoverflow.com/asdf404notfound");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.getInputStream(); // throws!

私の場合、たまたまコンテンツが 404 であることはわかっていますが、とにかく応答の本文を読みたいと思っています。

(私の場合、レスポンスコードは 403 ですが、レスポンスの本文に拒否の理由が説明されているので、それをユーザーに表示したいと思います。)

応答本文にアクセスするにはどうすればよいですか?

4

8 に答える 8

182

これがバグレポートです(閉じる、修正されない、バグではない)。

彼らのアドバイスは次のようにコーディングすることです:

HttpURLConnection httpConn = (HttpURLConnection)_urlConnection;
InputStream _is;
if (httpConn.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
    _is = httpConn.getInputStream();
} else {
     /* error from server */
    _is = httpConn.getErrorStream();
}
于 2009-03-05T03:26:26.427 に答える
2

これが質問に直接答えないことはわかっていますが、Sun が提供する HTTP 接続ライブラリを使用する代わりに、(私の意見では) はるかに簡単に操作できる API を備えたCommons HttpClientを参照することをお勧めします。

于 2009-03-05T02:03:24.300 に答える
2

最初に応答コードを確認してから使用しますHttpURLConnection.getErrorStream()

于 2009-03-05T02:20:51.170 に答える
1
InputStream is = null;
if (httpConn.getResponseCode() !=200) {
    is = httpConn.getErrorStream();
} else {
     /* error from server */
    is = httpConn.getInputStream();
}
于 2010-01-19T10:30:00.073 に答える