java http http-status-code-403

java - HttpURLConnection leyendo el contenido de la respuesta en error 403



http-status-code-403 (5)

Esta pregunta ya tiene una respuesta aquí:

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(); }



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