Leer una URL con Java

27/Ago/2007 Java , , , , , , 22 Comentarios

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,...)

  1. 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.

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

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

Sobre este BufferedReaderr 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.

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

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

Vídeos sobre Java


Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

22 comentarios en “Leer una URL con Java”

Víctor Cuervo

Hernan

Saludos. Leer una URL directamente creo que es algo elemental; lo que no encuentro y espero si puedan orientarme, es como enviar parametros POST de modo que responda la URL. En terminos PHP lo tengo claro y funciona, ya que hay paginas que necesitan parametros como: ‘method’ => ‘POST’,
‘header’ => ‘Content-type: application/json; chartset=utf-8’,
‘content’ => $postdata

Víctor Cuervo

santiago

Hola que tal! el codigo me anda barbaro cuando obtengo el contenido de una pagina que devuelve codigo html! Pero en mi caso particular que necesito obtener el contenido de una URL que devuelve con formato JSON me imprime null.Como lo puedo resolver?? Saludos y gracias

Víctor Cuervo

Mario

Gracias Victor.
Era justo lo q iba buscando.
Ahora desearia realizar otras cosas como por ejemplo, despues de leer el codigo fuente de una web poder introducir datos en el campo de usuario y contraseña. Lo que deseo realizar es un progamilla donde tenga recopilado todas mis cuentas de usario y con un solo click poder cambiar las contraseñas.
Si no es mucha molestia Victor, quisiera q te pusieras en contacto conmigo para que me orientaras un poco.
Espero tu email
Un saludo y gracias por todo

Víctor Cuervo

Alberto

Muchas gracias por el codigo , actualmente donde trabajo trabamos de comprobar la vulneravilidad de nuestro portal (ya que estamos en auditoria) y uno de los puntos a cubrir es evitar precisamente que la programación en las paginas pueda revelar información sencible del cliente.

Víctor Cuervo

beto

hola ojala y puedan ayudarme tengo q entregar un proyecto de netbean y tengo q hacer q imprima imagenes junto con el preceso, me refiero q cuando me pida algo el programa lo imprima con una imagen ojala y puedan ayudarme

Víctor Cuervo

Catmelo PCcar

hola , como se podria modificar para que me de el origen de la URL que llama a mi pagina ,cuando se tiene un link en otra pagina a mi URL

Víctor Cuervo

Eduardo Perez

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

Víctor Cuervo

cristian

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

Víctor Cuervo

John

Muchas gracias por el código,

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

Un saludo!

Víctor Cuervo

Abraham

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.

Víctor Cuervo

rosario

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

Víctor Cuervo

Alex

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

Víctor Cuervo

beltrixx

¿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.

Víctor Cuervo

Alex

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

Víctor Cuervo

beltrixx

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.

Víctor Cuervo

pollo

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

Víctor Cuervo

lsri8088

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?

Víctor Cuervo

Raul

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

Víctor Cuervo

Octavio González Rodríguez

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.

Víctor Cuervo

lineadecodigo

@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.

Víctor Cuervo

Anónimo

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.

Víctor Cuervo

yanith

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

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*