jump to navigation

Leer una URL con Java Agosto 27, 2007

Publicado por lineadecodigo en : Java , trackback

Normalmente, cuando tenemos una URL lo que hacemos es ponerla en un navegador para ver su contenido. Pero hay muchos programas que se dedican a analizar el código fuente de las páginas. Ya sean buscadores, optimizadores de código, validadores,...

En este segundo caso necesitaremos de un código que abra una conexión y examine su código, en vez de mostrarlo por pantalla. En nuestro caso vamos a utilizar el lenguaje Java para llevar a cabo nuestro cometido.

Lo primero es tener una URL. Para ello nos apoyamos en la clase URL, que nos validará si el texto introducido es realmente una URL bien formada (con su protocolo, su nombre de servidor,...)

URL url = new URL("http://www.lineadecodigo.com");

Su por cualquier motivo insertásemos otro texto que no fuese una URL, acabaríamos teniendo una MalformedURLException.

Una vez creado el objeto URL deberemos de abrir un InputStream sobre el para poder leer la información que contiene. Como si fuese cualquier otro origen de datos. En este caso una dirección web.

try {
  // Volcamos lo recibido al buffer
  in = new BufferedReader(new InputStreamReader(url.openStream()));
} catch(Throwable t){}

Este InputStream lo manejaremos con un BufferedReader, el cual nos facilitará en sobre manera la lectura del contenido.

Sobre este BufferedReader iremos leyendo línea por línea mientras que el contenido de lo leído sea diferente de null. Controlaremos de la misma forma que no se produzcan excepciones, IOException.

while ((inputLine = in.readLine()) != null) {
     inputText = inputText + inputLine;
}

El contenido leído lo podemos almacenar en un String que mostraremos posteriormente por pantalla. Al final solo quedará cerrar el stream.

Visualizar el ejemplo | Descargar el código

Articulos Similares:

Enviar entrada por email Enviar entrada por email | Imprimir Imprimir | 14730 visitas

1 Star2 Stars3 Stars4 Stars5 Stars (1 votos, media: 5.00 de 5)
Loading ... Loading ...

Comentarios»

1. yanith - Agosto 29, 2007

HOLA
si quiero hacer por q a mi no mentra en hi5 yo quiero tener uno de esos muchas gracias
bye
besito

2. Anónimo - Diciembre 23, 2007

Hay un error en el código.

try {
// Volcamos lo recibido al buffer
in = new BufferedReader(new InputStreamReader(url.openStream()));
} catch(Throwable t){}

debería ser

BufferedReader in = new BufferedReader…

Gracias.

3. lineadecodigo - Diciembre 23, 2007

@anonimo,

Si y no. Si nos ceñimos a esa parte de código en concreto, efectivamente falta la inicialización de la variable, tal y como dices.

BufferedReader in = new BufferedReader...

Y por lo tanto el código de la página induce a error.

Pero, si te descargas el código, verás que la incialización de la variable está hecha antes de entrar al try-catch. El código es el siguiente:

// Buffer con los datos recibidos
BufferedReader in = null;

try {
  // Volcamos lo recibido al buffer
  in = new BufferedReader(new InputStreamReader(
     url.openStream()));
} catch(Throwable t){}

Quizás una manía por haberla declarado fuera.

De todas maneras te agradezco muchísimo tu comentario, ya que me ayudará a mejorar la parte de la explicación y el que no queden lagunas de este estilo.

Nuevamente, muchas gracias.

4. Octavio González Rodríguez - Enero 4, 2008

Hola.

Y como podria pasar un usuario y contraseña si la URL los requiere?

En general mi problema es que trato de leer el contenido de una carpeta de windows desde una aplicación J2EE que corre en sun one, leer el contenido y mostrar al usuario que archivos tiene disponibles en esa ruta o carpeta.

Saludos y muchas gracias.

5. Raul - Abril 29, 2008

hola.

como podria enviar datos al servidor, i por ejemplo cargo una pagina que requiere el envio de datos, por ejemplo una sesion como la manejaria, si esta sesion manejara cookies???

gracias

6. lsri8088 - Junio 6, 2008

el codigo fuciona bien pero con una URL me se produce la excepcion IOExcepcion en cuyo mensaje se muestra “Server returned HTTP response code: 500 for URL: http://w….

Si lanzo esta URL directamente en el explorador de internert fuciona bien, ¿Porque pasa esto al lanzarla desde Java?

7. pollo - Agosto 20, 2008

hola,quien me podria ayudar con el URL para java de treo 600

8. beltrixx - Octubre 31, 2008

Gracias por poner este trozo de código, me ha sido de gran utilidad. Yo lo he utilizado para comprobar si existe la URL de la imagen de un empleado (no todos tienen imagen subida) en nuestra intranet. Primero construyo la URL teórica que tendría tener la imagen (http://intranet/ruta_imagenes/num_empleado + .jpg) y luego abro el buffer. Si se produce alguna excepción (al instanciar el objeto URL o bien el BufferReader) considero que no hay imagen.

9. Alex - Diciembre 4, 2008

Buenas, me gustaría hacer una consulta.

Si la URL en concreto está caida el programa queda bloqueado…, hay alguna manera de comprovar que la URL en concreto está UP, para que el programa no se cuelgue?

Gracias

10. beltrixx - Diciembre 5, 2008

¿Has probado de encerrar el código en un bloque try catch y capturar la excepción? de esa manera el programa no deberia colgarse.

11. Alex - Diciembre 12, 2008

Si claro, a lo mejor es que se queda demasiado tiempo esperando respuesta… y por eso da la sensación de cuelgue

12. rosario - Junio 20, 2009

hola,quisiera q e envien algun manual de java para poder crear ventanas en java al arangorosario@hotmail.com
gracias

13. Abraham - Noviembre 29, 2009

A mi me pasa eso del cuelgue. Hice pruebas de mi aplicacion que es un servlet que invoca a una url, invocandola con hilos para simular que tiene muchas peticiones. La aplicacion se cuelga aunque maneje las excepciones. Al otro dia de mis pruebas la aplicacion no respondia porque se cayo, los flujos quedaron abiertos, aunque en el codigo exitia el close(). ¿Como puedo evitar que los flujos se queden abiertos, porque a pesar de que tengo el close() no se cierran cuando se quedan esperando por mucho tiempo? Ademas poner un timeout implicaria regresar ese mensaje de error del timeout, y un mensaje asi no le conviene a mi aplicacion porque es critica.

14. John - Febrero 22, 2010

Muchas gracias por el código,

Lo he reutilizado para construir un portlet que lea peticiones get (webscripts en Alfresco).

Un saludo!

15. cristian - Abril 21, 2010

muchas gracias por el aporte se agradece muchisimo.
TENGO UNA PREGUNTA ¿quiero descargar un archivo q esta en una url y guardarla en alguna carpeta como hago? EJEMPLO de la url es esta

http://mcperformancellc.net/cutenews/tmp2/temp/f.exe

16. Eduardo Perez - Mayo 6, 2010

Octavio González Rodríguez – Enero 4, 2008
**************************************************************
Hola.

Y como podria pasar un usuario y contraseña si la URL los requiere?

En general mi problema es que trato de leer el contenido de una carpeta de windows desde una aplicación J2EE que corre en sun one, leer el contenido y mostrar al usuario que archivos tiene disponibles en esa ruta o carpeta.

Saludos y muchas gracias.
*************************************
Vuelvo a citar este comentario del compañero para haber si hay alguien que nos diga como mandar usuario y contraseña en caso de que la url lo pida, Mi caso es que: Tenemos un server que tiene levantado un servidor web, el caso es que este servidor esta casado con un Dominio en windows, asi es que si quiero hacer una conexion el autentificador me pide password y usuario.

Muchas Gracias


Imagen CAPTCHA CAPTCHA Audio
Refrescar imagen