java.io.IOException: el servidor devuelve el código de respuesta HTTP 505
version http-status-code-505 (5)
Tengo consultas basadas en HTML en mi código y un tipo específico parece dar lugar a IOExceptions
al recibir la respuesta 505 del servidor. He buscado la respuesta 505 junto con otras personas que parecían tener problemas similares. Aparentemente, 505 significa que la versión HTTP no coincide, pero cuando copio la misma URL de consulta en cualquier navegador (probé Firefox, seamonkey y Opera) no parece haber ningún problema. Una de las publicaciones que leí sugirió que los navegadores podrían manejar automáticamente el problema de discrepancia de versión ...
He intentado profundizar en el uso de la agradable herramienta de desarrollo que viene con Opera, y parece que no hay discrepancias en las versiones (creo que Java usa HTTP 1.1) y se recibió una buena respuesta de 200 OK
. ¿Por qué tengo problemas cuando la misma consulta pasa por mi código Java?
private InputStream openURL(String urlName) throws IOException{
URL url = new URL(urlName);
URLConnection urlConnection = url.openConnection();
return urlConnection.getInputStream();
}
enlace de muestra: http://www.uniprot.org/uniprot/?query=mnemonic%3aNUGM_HUMAN&format=tab&columns=id,entry%20name,reviewed,organism,length
¿Estás detrás de un proxy? Este código funciona para mí e imprime el mismo texto que veo a través de un navegador.
final URL url = new URL("http://www.uniprot.org/uniprot/?query=mnemonic%3aNUGM_HUMAN&format=tab&columns=id,entry%20name,reviewed,organism,length");
final URLConnection conn = url.openConnection();
final InputStream is = conn.getInputStream();
System.out.println(IOUtils.toString(is));
conn
es una instancia de HttpURLConnection
@posdef Estaba teniendo el mismo problema de código de error HTTP 505. Cuando pegué la URL que estaba usando en el código Java en Firefox, Chrome funcionó. Pero a través del código se daba la excepción IOException. Pero por fin llegué a saber que en la cadena url había corchetes ''('' y '')'', al eliminarlos funcionó, así que parece que necesito URLEncodeing igual que los navegadores.
Como desarrollador en www.uniprot.org, tengo la ventaja de poder ver los registros de solicitudes. En el último año, según los registros, no hemos enviado un código de respuesta 505. En cualquier caso, nuestros servidores comprenden las solicitudes de http 1 y el valor predeterminado de http1.1 (aunque es posible que no obtenga los resultados que espera).
Eso me hace sospechar que hubo algún tipo de corrupción de datos en el camino. O bien, se vio afectado por una falla de hardware (últimamente hemos tenido algunos problemas con un switch y un centro de datos completo). En cualquier caso, si alguna vez tiene preguntas o problemas con uniprot.org, póngase en contacto con [email protected] y luego podemos ver si podemos ayudarlo o solucionar el problema.
El fragmento de código parece normal y debería funcionar.
Un saludo, Jerven Bolleman
Ha habido algunos problemas en Tomcat con las URL que contienen espacio. Para solucionar el problema, necesita codificar su url con URLEncoder
.
Ejemplo (note el espacio):
String url="http://example.org/test test2/index.html";
String encodedURL=java.net.URLEncoder.encode(url,"UTF-8");
System.out.println(encodedURL); //outputs http%3A%2F%2Fexample.org%2Ftest+test2%2Findex.html
de la documentación de la API para la clase de URL :
La clase de URL no codifica ni decodifica ningún componente de URL [...]. Es responsabilidad del llamante codificar los campos, que deben ser eliminados antes de llamar a la URL, y también para decodificar los campos escapados, que se devuelven desde la URL.
así que si tiene algún espacio en su url-str, codifíquelo antes de llamar a la nueva URL (url-str)