2011-01-25 8 views
20

Mi código es el siguiente:java.io.IOException: Servidor de código de respuesta HTTP devuelto: 403 para URL

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 estoy tratando de acceder a la URL a través del navegador que no hay problema, pero cuando intente acceder a través de un programa java, arroja expection:

java.io.IOException: Server returned HTTP response code: 403 for URL 

¿Cuál es la solución?

Respuesta

38

Añadir el código de abajo en el medio 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 para simplemente permitir que ciertos tipos de aplicaciones de usuario. Esto mantendrá su sitio web seguro y el uso de ancho de banda bajo.

Algunos posibles "Agentes de usuario" incorrectos es posible que desee bloquearlos en su servidor, en caso de que no desee que las personas lean su contenido y ancho de banda. Pero el agente de usuario puede ser falso, como puede ver en mi ejemplo anterior.

+0

Se encontraría una buena explicación de esta pregunta [aquí] (http://stackoverflow.com/questions/31619746/why-should-i-access-a-url-using-a-user-agent) – manetsus

4

403 significa prohibido. De here: -

10.4.4 403 Forbidden

El servidor ha entendido la solicitud, pero se niega a cumplirlo. 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 que no se ha cumplido la solicitud , DEBERÍA describir el motivo del rechazo en la entidad. Si el servidor no desea poner a disposición del cliente esta información , el estado código 404 (No encontrado) puede utilizarse en su lugar .

Debe ponerse en contacto con el propietario del sitio para asegurarse de que los permisos estén establecidos correctamente.

EDIT Veo tu problema. Ejecuté la URL a través de Fiddler. Me di cuenta de 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 necesaria

Este código es similar al 401 (no autorizado), pero indica que el cliente debe primero autenticarse con el proxy. El proxy DEBE devolver un campo de encabezado Proxy-Autenticación (sección 14.33) que contiene una impugnación aplicable al proxy para el recurso solicitado . El cliente MAYO repite la solicitud con un campo de encabezado Proxy-Autorización adecuado (sección 14.34). acceso HTTP autenticación se explica en "HTTP Autenticación: Básico y digerir autenticación de acceso"

Véase también esta cuestión relevante.

+0

Mr coolbeans, gracias por la pronta respuesta vi pocos artículos en la web que dicen como lo mencioné pero hay alguna solución a esto quiero decir si el contenido estaba prohibido por qué mi navegador puede acceder a la URL ? ¡gracias de nuevo! – vaibhav

2

SI el navegador puede acceder a la página, y su código no puede, 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 se me ocurren 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 soporte para pasar la cookie. Esto es muy probable

  • Los filtros del sitio se basan en los agentes de usuario. Puede configurar el agente de usuario. Esto no es tan probable.

Cuestiones relacionadas