java - HttpURLConnection leyendo el contenido de la respuesta en error 403
http-status-code-403 (5)
Esta pregunta ya tiene una respuesta aquí:
- Lea el cuerpo de la respuesta de error en Java 6 respuestas
Cuando obtengo datos de una URL con una respuesta 403
is = conn.getInputStream();
Lanza una IOException y no puedo obtener los datos de respuesta.
Pero cuando uso Firefox y acceso a esa url directamente, The ResponseCode sigue siendo 403, pero puedo obtener el contenido html
Ejemplo de uso de 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();
}
El método HttpURLConnection.getErrorStream
devolverá un InputStream
que se puede usar para recuperar datos de condiciones de error (como un 404), según los javadocs.
Obtuve el mismo error incluso después de agregar una cadena de agente. Finalmente, después de un día, la investigación descubrió el problema. En realidad, si el esquema de URL comienza con "HTTPS", se genera el error 403. Debe estar en minúscula ("https"). Así que asegúrese de llamar a "url.toLowercase ()" antes de abrir la conexión
intente algo como esto:
try {
String text = "url";
URL url = new URL(text);
URLConnection conn = url.openConnection();
// fake request coming from browser
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729)");
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String f = in.readLine();
in.close();
System.out.println(f);
} catch (Exception e) {
e.printStackTrace();
}
prueba esto:
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getResponseCode() / 100 == 2 ? con.getInputStream() : con.getErrorStream()));
fuente https://.com/a/30712213/505623