HttpURLConnection reading response content on 403 error [duplicate]
When I fetch data from an URL with a 403 response
is = conn.getInputStream();
It throws an IOException and I can't get the response data.
But when I use firefox and access that url directly, The ResponseCode is still 403, but I can get the html content
Solution 1:
The HttpURLConnection.getErrorStream
method will return an InputStream
which can be used to retrieve data from error conditions (such as a 404), according to the javadocs.
Solution 2:
Usage example of HttpURLConnection
:
String response = null;
try {
URL url = new URL("http://google.com/pagedoesnotexist");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// Hack to force HttpURLConnection to run the request
// Otherwise getErrorStream always returns null
connection.getResponseCode();
InputStream stream = connection.getErrorStream();
if (stream == null) {
stream = connection.getInputStream();
}
// This is a try with resources, Java 7+ only
// If you use Java 6 or less, use a finally block instead
try (Scanner scanner = new Scanner(stream)) {
scanner.useDelimiter("\\Z");
response = scanner.next();
}
} catch (MalformedURLException e) {
// Replace this with your exception handling
e.printStackTrace();
} catch (IOException e) {
// Replace this with your exception handling
e.printStackTrace();
}