returned - java.io.IOException: El servidor devolvió el código de respuesta HTTP: 403 para la URL
java io ioexception server returned http response code 403 for url (3)
403 significa prohibido. Desde here : -
10.4.4 403 Prohibido
El servidor entendió la solicitud, pero se niega a cumplirla. La autorización no ayudará y la solicitud NO DEBE repetirse. Si el método de solicitud no era HEAD y el servidor desea hacer público el motivo por el cual la solicitud no se ha cumplido, DEBE describir el motivo de la denegación en la entidad. Si el servidor no desea que esta información esté disponible para el cliente, se puede usar el código de estado 404 (No encontrado) en su lugar.
Debe ponerse en contacto con el propietario del sitio para asegurarse de que los permisos se configuren correctamente.
EDITAR veo tu problema Corrí la URL a través de Fiddler. Noté que obtengo un 407 que significa abajo. Esto debería ayudarte a ir en la dirección correcta.
10.4.8 407 autenticación de proxy requerida
Este código es similar a 401 (no autorizado), pero indica que el cliente primero debe autenticarse con el proxy. El proxy DEBE devolver un campo de encabezado de autenticación proxy (sección 14.33) que contenga un desafío aplicable al proxy para el recurso solicitado. El cliente PUEDE repetir la solicitud con un campo de encabezado de Autorización Proxy adecuado (sección 14.34). La autenticación de acceso HTTP se explica en "Autenticación HTTP: Autenticación de acceso básica y resumida"
También vea esta pregunta relevante.
Esta pregunta ya tiene una respuesta aquí:
- 403 ¿Prohibido con Java pero no el navegador web? 4 respuestas
Mi código va así:
URL url;
URLConnection uc;
StringBuilder parsedContentFromUrl = new StringBuilder();
String urlString="http://www.example.com/content/w2e4dhy3kxya1v0d/";
System.out.println("Getting content for URl : " + urlString);
url = new URL(urlString);
uc = url.openConnection();
uc.connect();
uc.getInputStream();
BufferedInputStream in = new BufferedInputStream(uc.getInputStream());
int ch;
while ((ch = in.read()) != -1) {
parsedContentFromUrl.append((char) ch);
}
System.out.println(parsedContentFromUrl);
Sin embargo, cuando intento acceder a la URL a través del navegador, no hay ningún problema, pero cuando intento acceder a ella a través de un programa java, se produce una revisión:
java.io.IOException: Server returned HTTP response code: 403 for URL
¿Cuál es la solución?
Agregue el siguiente código entre uc.connect();
y uc.getInputStream();
:
uc = url.openConnection();
uc.addRequestProperty("User-Agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
Sin embargo, es una buena idea permitir ciertos tipos de agentes de usuario. Esto mantendrá su sitio web seguro y el uso de ancho de banda bajo.
Es posible que algunos ''Agentes de usuario'' no funcionen correctamente y que quiera bloquear desde su servidor, dependiendo de si no quiere que la gente descargue su contenido y ancho de banda. Pero, el agente de usuario se puede falsificar como se puede ver en mi ejemplo anterior.
Si el navegador puede acceder a la página y su código no, entonces hay algo diferente entre la solicitud del navegador y su solicitud. Puede ver la solicitud del navegador, usando, por ejemplo, Firebug, para ver cuáles son las diferencias. Algunas cosas que puedo pensar son:
El sitio establece una cookie (tal vez durante el inicio de sesión). Es posible que pueda manejar esto en el código, tendrá que agregar explícitamente el soporte para pasar la cookie. Esto es lo más probable.
Los filtros de sitio basados en agentes de usuario. Puede configurar el agente de usuario. Esto no es tan probable.