サーバーがエラーを返した場合に 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."}]}
次の方法を使用して、応答メッセージ (つまり、「内部サーバー エラー」) とコード (つまり、「500」) を取得できます。
conn.getResponseMessage();
conn.getResponseCode();
しかし、リクエスト本体を取得できません... ライブラリに私が気付かなかったメソッドがいくつかあるのでしょうか?
ベストアンサー1
応答コードが200または2xxでない場合は、getErrorStream()
代わりにgetInputStream().