Tôi gặp sự cố với việc truy xuất phản hồi Json trong trường hợp máy chủ trả về lỗi. Xem chi tiết bên dưới.
Cách tôi thực hiện yêu cầu
Tôi sử dụng java.net.HttpURLConnection
. Tôi thiết lập thuộc tính yêu cầu, sau đó tôi thực hiện:
conn = (HttpURLConnection) url.openConnection();
Sau đó, khi yêu cầu thành công, tôi nhận được phản hồi Json:
br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
sb = new StringBuilder();
String output;
while ((output = br.readLine()) != null) {
sb.append(output);
}
return sb.toString();
... và vấn đề là:
Tôi không thể truy xuất Json đã nhận khi máy chủ trả về một số lỗi như 50x hoặc 40x,. Dòng sau ném IOException:
br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
// throws java.io.IOException: Server returned HTTP response code: 401 for URL: www.example.com
Máy chủ chắc chắn sẽ gửi nội dung, tôi thấy nó trong công cụ bên ngoài Burp Suite:
HTTP/1.1 401 Unauthorized
{"type":"AuthApiException","message":"AuthApiException","errors":[{"field":"email","message":"Invalid username and/or password."}]}
Tôi có thể nhận được thông báo phản hồi (tức là "Lỗi máy chủ nội bộ") và mã (tức là "500") bằng các phương pháp sau:
conn.getResponseMessage();
conn.getResponseCode();
Nhưng tôi không thể truy xuất nội dung yêu cầu ... có thể có một số phương pháp tôi không nhận thấy trong thư viện?