2010-05-08 13 views
8

Utilizo la biblioteca rome.dev.java.net para buscar RSS.java.io.FileNotFoundException para URL válida

Código es

URL feedUrl = new URL("http://planet.rubyonrails.ru/xml/rss"); 
SyndFeedInput input = new SyndFeedInput(); 
SyndFeed feed = input.build(new XmlReader(feedUrl)); 

Se puede comprobar que es http://planet.rubyonrails.ru/xml/rss URL válida y la página se muestra en el navegador.

pero me da a excepción de mi solicitud para

java.io.FileNotFoundException: http://planet.rubyonrails.ru/xml/rss 
     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1311) 
     at com.sun.syndication.io.XmlReader.<init>(XmlReader.java:237) 
     at com.sun.syndication.io.XmlReader.<init>(XmlReader.java:213) 
     at rssdaemonapp.ValidatorThread.run(ValidatorThread.java:32) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
     at java.lang.Thread.run(Thread.java:619) 

No uso ningún proxy. Obtengo esta excepción en mi PC y en el servidor de producción y solo para esta URL, otras URL están funcionando.

Respuesta

3

Sospecho que no le gusta Java. Debe falsificar su encabezado "User-Agent", no está seguro si es factible con su biblioteca RSS.

Otra sugerencia es que usted obtenga los datos usted mismo y envíe los datos al lector de feeds.

7

El código que está lanzando una excepción que se parece a esto ... suponiendo que tengo la versión correcta:

if (respCode >= 400) { 
    if (respCode == 404 || respCode == 410) { 
     throw new FileNotFoundException(url.toString()); 
    } else { 
     throw new java.io.IOException(
      "Server returned HTTP" 
      + " response code: " + respCode 
      + " for URL: " + url.toString()); 
    } 
} 

En otras palabras, cuando usted está haciendo la obtenemos de Java, que está recibiendo una Respuesta 404 o 410 Ahora cuando realizo la solicitud usando la utilidad wget, obtengo una respuesta de 200. Así que mi suposición es que el problema es uno de los siguientes:

  • Ocurrió la solicitud cuando sufrían algún problema de configuración.
  • Han implementado su servidor para devolver 404/410 para ciertas cadenas de User-Agent.

Otras posibilidades son que están realizando algún tipo de filtrado del lado del servidor en las direcciones IP o que hay algún problema de DNS que hace que sus solicitudes vayan a una dirección IP diferente. Pero ambos parecen contradecirse por el hecho de que puede acceder al feed en su navegador.

Si este es el User-Agent, eche un vistazo a sus términos de servicio para ver si tienen prohibidos ciertos tipos de uso de su sitio/fuente RSS.

+0

¡Intenté conseguir la página usando apacha HttpClient y funciona! Ver mi respuesta – Alexei

4

yo probamos este código

HttpClient httpClient = new DefaultHttpClient(); 
HttpGet pageGet = new HttpGet(feedUrl.toURI()); 
HttpResponse response = httpClient.execute(pageGet); 
SyndFeedInput input = new SyndFeedInput(); 
SyndFeed feed = input.build(new XmlReader(response.getEntity().getContent())); 

Funciona! Gracias por tus sugerencias Parece que se trata de usuario-agente.

Cuestiones relacionadas