2011-09-20 9 views
5
String url = "http://maps.googleapis.com/maps/api/directions/xml?origin=Chicago,IL&destination=Los+Angeles,CA&waypoints=Joplin,MO|Oklahoma+City,OK&sensor=false"; 

     URL google = new URL(url); 
     HttpURLConnection con = (HttpURLConnection) google.openConnection(); 

y lo uso BufferedReader para imprimir el contenido de recibo de error 403403 errores en el acceso a una URL, pero funciona bien en los navegadores

la misma URL funciona bien en el navegador. ¿Podría alguien sugerir?

Respuesta

2

HTTP 403 es Forbidden código de estado. Debería leer el HttpURLConnection.getErrorStream() para ver la respuesta del servidor (que puede indicarle por qué se le ha proporcionado un HTTP 403), si corresponde.

+0

aquí es cómo leer el flujo de error: http://stackoverflow.com/a/9129991/10592 Es necesario llamar connection.getResponseCode() antes de getErrorStream() va a funcionar. –

+0

@Tim Coope, es gracioso cuando publicaste la respuesta que ** publiqué **. –

0

La mayoría de los navegadores codifican automáticamente las URL cuando las ingresa, pero la función de URL de Java no. Debe codificar la URL con URLEncoder URL Encoder

2

Este código debería funcionar bien. Si ha estado haciendo una serie de solicitudes, es posible que Google simplemente lo esté estrangulando. He visto a Google hacer esto antes. Puede intentar usar un proxy para verificar.

+0

http://code.google.com/p/gmaps-api-issues/issues/detail?id=1933 – lds23

5

La razón funciona en un navegador pero no en java código se que el navegador agrega algunos encabezados HTTP que le faltan en su código Java, y el servidor requiere esos encabezados. Estuve en la misma situación, y la URL funcionó tanto en Chrome como en el complemento de Chrome "Simple REST Client", pero no funcionó en Java. La adición de esta línea antes del getInputStream() resuelto el problema:

   connection.addRequestProperty("User-Agent", "Mozilla/4.0"); 

..even aunque nunca he usado Mozilla. Su situación puede requerir un encabezado diferente. Podría estar relacionado con las cookies ... Estaba recibiendo texto en la secuencia de error que me aconsejaba habilitar las cookies.

Tenga en cuenta que puede obtener más información si observa el texto de error. Aquí está mi código:

 try { 
      HttpURLConnection connection = ((HttpURLConnection)url.openConnection()); 
      connection.addRequestProperty("User-Agent", "Mozilla/4.0"); 
      InputStream input; 
      if (connection.getResponseCode() == 200) // this must be called before 'getErrorStream()' works 
       input = connection.getInputStream(); 
      else input = connection.getErrorStream(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(input)); 
      String msg; 
      while ((msg =reader.readLine()) != null) 
       System.out.println(msg); 
     } catch (IOException e) { 
      System.err.println(e); 
     } 
Cuestiones relacionadas