サーバーがエラーを返す場合に備えて、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();
しかし、リクエストの本文を取得できません...ライブラリに気づかなかったメソッドがあるのでしょうか?