<DISCLAIMER>Han pasado unos cuantos días desde que he podido postear algo nuevo. Me ha pillado de lleno el famoso volcán islandés que ha paralizado el tráfico aéreo en Europa, por lo que he estado atrapado varios días en Bruselas sin posibilidad de salir de allí y, lo que es peor, ¡sin ordenador ni Internet! :-S </DISCLAIMER>

Esta es una pregunta muy habitual que he visto por ahí y que realmente es muy sencilla de poner en marcha:

"¿Cómo puedo llamar a una página Web (o recurso remoto HTTP) desde mi propio programa y mostrar el resultado en mi aplicación?"

La respuesta es muy sencilla, pero no todo el mundo sabe cómo hacerlo. Básicamente hay que utilizar la clase WebRequest. Este método, por ejemplo, sirve para solicitar un determinado recurso a partir de su URL, que se le pasa como parámetro, devolviendo una cadena con el contenido del recurso (o generando una excepción si el recurso no existe o da un error):

	static string LeerRecursoWeb(string laUrl)
	{
		// Cear la solicitud de la URL.
		WebRequest request = WebRequest.Create(laUrl);
		// Obtener la respuesta.
		WebResponse response = request.GetResponse();
		// Abrir el stream de la respuesta recibida.
		StreamReader reader = new StreamReader(response.GetResponseStream());
		// Leer el contenido.
		string res = reader.ReadToEnd();

		// Cerrar los streams abiertos.
		reader.Close();
		response.Close();
		
		// Devolver resultado
		return res;
	}

Cómo vemos es bastante directo. Ahora, por ejemplo, podemos mostrar los enlaces más relevantes sobre ASP.NET en Delicious usando el siguiente código (en este caso para una aplicación de consola, pero valdría para cualquier otra):

		Console.WriteLine(LeerRecursoWeb("http://feeds.delicious.com/v2/RSS/popular/ASP.NET"));

Muy sencillo.

Los detalles importantes

Hay algunos detalles que merece la pena comentar.

La clase WebRequest es abstracta. Esto quiere decir que no se usa directamente, sino que se utiliza para crear otras clases derivadas que implementan los métodos apropiados según el protocolo a utilizar. Por ello existen en la plataforma .NET otras clases más especializadas como HttpWebRequest, FtpWebRequest o FileWebRerquest, especializadas en llamar a recursos por HTTP, por FTP y por el sistema de archivos respectivamente.

El método Create de la clase abstracta, en función de la URL que le pasemos, crea la clase derivada adecuada para gestionar el protocolo que se deba utilizar y obntener así el resultado. Gracias a ello, la función que pongo más arriba funcionaría también con las siguiente URLs:

		Console.WriteLine(LeerRecursoWeb("ftp://ftp.miservidor.com/carpeta/miarchivo.txt"));
		Console.WriteLine(LeerRecursoWeb("file://c:\MiCarpeta\Miarchivo.txt"));

De este modo el código se adapta a la URL usando la clase más apropiada en cada caso, lo que nos da mucha flexibilidad.

Por supuesto si quisiésemos restringir el uso a un protocolo concreto, como solamente el HTTP, es posible usar de manera directa cada una de estas clases especializadas y el código sería igual.

También existen otras clases especializadas, como por ejemplo WebClient, que nos permiten más control y enviar datos además de recibirlos, pero para responder a la pregunta planteada y poder empezar a investigar un poco por tu cuenta tienes material más que de sobra :-)

NOTA: Por cierto, hay que incluir los espacios de nombres System.IO y System.Net, no te olvides...

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor

Escrito por un humano, no por una IA