Conectar a una url, webservice o REST en C#

Hoy en día se necesita conectar con páginas web, bien sea para extraer información de una página o para conectar contra un WebService. DotNet o .Net, nos provee de una serie de herramientas para la conexión contra WebServices, pero hay casos excepcionales, en los que necesitaremos conectarnos de una manera más arcaica y tradicional, al estilo de la librería cURL por ejemplo. En este caso mostrare un ejemplo de como conectarnos a una url de un WebService ficticio y como recoger su contenido para luego ser tratado. En primer lugar crearemos un String donde poner la url de la conexión. Seguidamente conectaremos utilizando los objetos HttpWebRequest y HttpWebResponse y generaremos un StreamReader con la respuesta. El código quedaría así:

String baseUri = "http://rutaalwebserice";
HttpWebRequest connection = (HttpWebRequest)HttpWebRequest.Create(baseUri);
connection.Method = "GET";
HttpWebResponse response = (HttpWebResponse)connection.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);

Ya tenemos nuestra variable sr (StreamReader) para poder utilizarla para trabajar con el supuesto XML o HTML devuelto. Es importante apuntar, que para utilizar estas librerías, necesitamos incluir los siguientes nombres de espacio:

using System.Web;
using System.Net;
using System.IO;
using System.Text;

15 comentarios en “Conectar a una url, webservice o REST en C#

  1. Muy buenos aportes me gustaria aprender mas sobre estos temas; apenas estoy iniciando en esta carrera y de este tema tengo que hacer un trabajo me podrias colaborar si eres tan amable y gracias otra ves

  2. Pues dime que necesitas y si puedo ayudarte. Lo ideal es que si estas empezando, te compres un libro, lo saques de una bliblioteca o busques algun buen tutorial por internet, aunque sin ayuda empezar por .net de primeras puede ser un tanto complicado en comparacion con otros lenguajes como php

  3. Muchas gracias
    lo que necesito para un trabajo y no como hacerlo es lo siguiente programar en c# un algoritmo que permita extraer el codigo html de una pagina como por ejemplo el codigo de http://www.google.com
    cualquier ayuda que me puedas brindar estaria agradecido

  4. Hola John, he quitado tu correo porque no es conveniente ponerlo ya que luego te lo pueden pillar para enviarte spam.

    Lo que me dices tienes que mezclar 2 cosas, el ejemplo anterior puede conectar, en este caso por GET, como una conexion normal a una web, por ejemplo google. Acto seguido, con un string con la respuesta, para recoger datos de la web, necesitaras usar patrones regulares. En .Net, hay un par de clases para ello en System.Text.RegularExpressions. Te recomiendo la clase Regex para lo que tu necesitas.

    Antes de nada, te recomendaria buscar informacion por google sobre patrones regulares, para que entiendas que son y como se construyen, independientemente del lenguaje y luego ya te pones con la parte de .Net

  5. Hola:
    Muy buenos los comentarios. Yo quisiera conectarme a un webservice atraves de un proxy http, y si es posible que sea transparente para mi aplicacion, gracias. 😀

  6. Hola, me podrias ayudar, desde mi aplicacion windown quiero conectarme a una web que tiene un form para pedir un usuario y un password y lo envia por metodo post. Como podria hacer este proceso para conectarme automaticamente desde mi aplicacion. De antemano gracias por tu respuesta

  7. Voy a ver si escribo un post un poco mas extenso donde explique las 2 conexiones tanto en vb como en c#. Para hacerlo por post, lo primero es donde esta el connection.method = "GET" tienes que cambiar el GET por POST. Una vez hecho esto, entre la linea que hemos cambiando y la llamada al create (antes de hacer el GetResponse y despues de hacer el Create) debemos de poner lo siguiente:

    Byte[] requestBytes;
    Stream requestStream;

    requestBytes = Encoding.UTF8.GetBytes("&usuario=xxxxx&pass=xxxxx");
    requestStream = connection.GetRequestStream();
    requestStream.Write(requestBytes, 0, requestBytes.Length);
    requestStream.Flush();
    requestStream.Close();

    Lo que hace es basicamente es declarar un array de bytes y un stream, los bytes los obtenemos de un string que sea el que enviemos a la peticion, por ejemplo los parametros usuario y pass. Una vez lo tenemos todo preparado, en el stream de peticion, escribimos el array de bytes, se hace un flush (manias mas que otra cosa) para que vuelque el contenido de la escritura al stream y lo cerramos para que se guarde el contenido dentro de la conexion. De esta forma, hemos escrito de un string, a un array de bytes para escribir en un stream que sera lo que se envie como peticion a la conexion.

    Parece un poco lioso, pero lo unico que hay que tener en cuenta es cambiar el string de GetBytes (recomendable plantar una variable). Tambien decirte que he usado el Encoding.UTF8, porque es el que suelo usar, trabajando con UTF8, pero vamos, puedes usar el ACII o cualquier otro.

    Espero que te sirva de ayuda.

  8. Buenos días, soy nuevo en esto de C# y llegue a tu blog por google. Necesito loguearme a un sitio web para luego descargar un archivo. La url es "http://www.mistio.com/descargas.php?session=xml". Hay que utilizar el metodo POST y los parametros de login son para usuario "dsusuario" y password "dspassword". Bien, probe tu codigo utilizando mis datos, y no logro conectame, es decir que a la pagina descargas.php no llegan los parametros del login y me muestra la pagina como si no me hubiera logueado. Desde ya muchas gracias!

  9. Hola

    Desde mi formulario en c# introduzco una serie de parametros y me realiza la busqueda en google. Mi problema es que tengo que buscar dentro de las paginas resultantes una palabra en concreto y guardar ese dato.

    ¿Sabrías como hacer eso?

    Gracias por adelantado 🙂

  10. hola la verdad es que no soy programador web, es más se muy poco del tema, pero si me gusta C# porque es multiplataforma, con el puedo programar microcontroladores y hacer aplicaciones para windws/ linux que me dejan en la escuela pero tengo una duda.
    ¿es factible poder controlar algun sistema digamos... las luces de la casa usando una conexion proxy con C#?¿ hacer ficheros .dat y ese tipo de cosas? en mi escuela no usan este lenguaje por eso es que tengo bastantes dudas. si tienes algun libro que me ayude con esto te lo agradeceria mucho!!

  11. Buenas.

    Estoy intentando realizar en .NET un login a un servidor CAS pero no encuentro ninguna información. ¿Podrías decirme como podría implementarlo?

    Saluds.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *