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);
}
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. –
@Tim Coope, es gracioso cuando publicaste la respuesta que ** publiqué **. –