[解決済み] 2xx以外のコードが返された場合、HttpURLConnectionを使用してレスポンスボディを取得するにはどうすればよいですか?
2022-09-28 20:30:26
質問内容
サーバーがエラーを返した場合、Jsonレスポンスを取得するのに問題があります。詳細は以下をご覧ください。
リクエストの実行方法
私は
java.net.HttpURLConnection
. 私は要求のプロパティを設定し、私が行う。
conn = (HttpURLConnection) url.openConnection();
その後、リクエストに成功すると、レスポンスのJsonを取得します。
br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
sb = new StringBuilder();
String output;
while ((output = br.readLine()) != null) {
sb.append(output);
}
return sb.toString();
...そして、問題なのは
サーバーが50xや40xのようなエラーを返すと、受信したJsonを取り出すことができないのです。以下の行はIOExceptionを投げています。
br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
// throws java.io.IOException: Server returned HTTP response code: 401 for URL: www.example.com
サーバーがボディを送信しているのは確かで、外部ツールのBurp Suiteで確認できます。
HTTP/1.1 401 Unauthorized
{"type":"AuthApiException","message":"AuthApiException","errors":[{"field":"email","message":"Invalid username and/or password."}]}
以下の方法で、応答メッセージ(例:"Internal Server Error")とコード(例:"500")を取得することができます。
conn.getResponseMessage();
conn.getResponseCode();
しかし、リクエストボディを取得することができません...もしかしたら、ライブラリに私が気づいていないメソッドがあるのでしょうか?
どのように解決するのですか?
間違ったメソッドを使用したためにエラーが発生しました。
BufferedReader br = null;
if (100 <= conn.getResponseCode() && conn.getResponseCode() <= 399) {
br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
} else {
br = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
}
関連
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
セミコロン期待値エラー解決
-
java.sql.SQLException: 結果セットの開始前
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
Java:未解決コンパイル問題の解決方法
-
Java JDKのダイナミックプロキシ(AOP)の使用と実装の原理分析
-
htmlとwordの相互変換の実装(画像あり)
-
[解決済み] リソースが既に存在する場合の POST に対する HTTP レスポンスコード
-
[解決済み】JSP 2を使用して、JSPファイル内のJavaコードを回避するにはどうすればよいですか?
-
[解決済み】HttpURLConnectionにNameValuePairを使用してPOSTでパラメータを追加する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
アクセス制限です。タイプ 'JPEGCodec' は API ではない ☞My Blog Github ☜ ホームページを見る
-
executeQuery()でデータ操作文が発行できない。解決方法
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
Javaクラスが "Error occurred during initialization of boot layer "というエラーで実行される。
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException:5 エラー
-
Uncaught ReferenceError: は定義されていません。
-
keytool error: java.io.FileNotFoundException: cacerts (アクセス拒否されました。)
-
java send https request prompt java.security.cert.について。
-
Junitのユニットテストエラー
-
java 365*1000*60*60*24 計算問題