I➨ Bot para Iniciar Sesion en un Formulario Web En este ocasión veremos como programarnos un bot para iniciar session en un formulario web y obtener información una vez logeado en el sistema, en concreto lo haremos en un formulario de mitelcel.com para consultar el saldo de una sim. El Bot lo programaremos en C# y haremos uso de las clases HttpWebRequest y HttpWebResponse, asi como de CookieContainer para mantener la cookie de inicio de sesion, este articulo esta orientado para que sepas como hacer que funcione en cualquier formulario web haciendo uso de la herramienta de Chrome - Chrome Developer Tools - observando las cabeceras enviadas en cada petición web. Si quieres automatizar cualquier proceso web para tus programas y no sabes como iniciar sesion en un sitio esta es tu solución! Acompáñanos! [sociallocker id="2482"][descargar-pdf][/sociallocker] Escenario Ingresa a MiTelcel.com y veras que es una pagina de Telcel ( compañia celular ) en donde podemos dar de alta un numero y tener una cuenta, desde la cual podemos hacer varias operaciones con nuestra linea, una de ellas es la consulta de saldo. Asi que lo que haremos sera una aplicacion programada en C# para iniciar sesion en MiTelcel.com ademas de obtener el saldo y vigencia de una linea ya registrada. Chrome Developer Tools - Nuestro Plan Si nos vamos a la pagina donde esta nuestro formulario web nos encontraremos con el boton de enviar informacion, si usamos el navegador google chrome podemos hacer click derecho en este boton y dar click en Inspeccionar elemento, despues en el panel de herramientas que nos aparece nos cambiamos a Network, ahora damos click en el boton de login ( despues de obviamente haber escrito nuestras credenciales :yum: ) Una vez que hemos iniciado sesión veremos en nuestro panel de herramientas de desarrolladores de chrome ( el panel del que te hable antes pues :yum: ) el historico de los eventos de red que ocasiono nuestro click en login.. En el panel lateral izquierdo nos vamos al primer elemento de la lista llamado auth y en el panel de la derecha nos aseguramos que estamos en Headers, ahora toma nota de estas cabeceras que son las que enviaremos en nuestra peticion en c# para iniciar sesion.. HttpWebRequest y HttpWebResponse Estas clases de C# nos ayudaran a enviar peticiones y recibir respuestas a sitios web de manera facil y comoda, lo primero sera conectarse a mitelcel enviando las cabeceras que vimos en la seccion anterior HttpWebRequest peticionGalleta = (HttpWebRequest)WebRequest.Create("https://www.mitelcel.com/mitelcel/login/auth"); peticionGalleta.ProtocolVersion = HttpVersion.Version11; peticionGalleta.Method = "POST"; peticionGalleta.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; peticionGalleta.ContentLength = 42; peticionGalleta.ContentType = "application/x-www-form-urlencoded"; peticionGalleta.Host = "www.mitelcel.com"; peticionGalleta.Referer = "www.mitelcel.com/mitelcel/login"; peticionGalleta.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36"; Ahora para enviar nuestra informacion de usuario y contraseña necesitamos lo siguiente: string postData = "j_username="+usuario+"&j_password="+contraseña; byte[] byteArray = Encoding.UTF8.GetBytes(postData); donde usuario y contraseña es tu informacion a llenar y j_username / j_password son los nombres de los controles html del formulario. StreamWriter sw = new StreamWriter(peticionGalleta.GetRequestStream()); sw.Write(postData, 0, byteArray.Length); sw.Close(); HttpWebResponse respuestaGalleta = (HttpWebResponse)peticionGalleta.GetResponse(); StreamReader lectorGalleta = new StreamReader(respuestaGalleta.GetResponseStream()); Si imprimieras el contenido de lectorGalleta seguro que recibes el codigo html de tu pagina ya logueado string html = lector.ReadToEnd(); pero no mantendrias la sesion, para mantenerla necesitamos del objeto CookieContainer.. ¿Quieres informacion mas detallada de las clases HttpWebRequest y HttpWebResponse? Manteniendo la Sesion Teniendo la URL de la pagina que quieres obtener la informacion ( en mi caso sera https://www.mitelcel.com/mitelcel/micuenta/saldo para obtener el saldo de la sim ), declara un objeto CookieContainer asi: CookieContainer galleta = new CookieContainer(); e incluyelo en las cabeceras a enviar: HttpWebRequest peticion = (HttpWebRequest)WebRequest.Create("https://www.mitelcel.com/mitelcel/micuenta/saldo"); peticion.Method = "GET"; peticion.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; peticion.KeepAlive = true; peticion.CookieContainer = galleta; peticion.Host = "www.mitelcel.com"; peticion.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36"; Como puedes ver ahora las cabeceras a enviar varian, estas las obtuvimos mediante el mismo procedimiento anterior en el cual inspeccionamos el elemento que nos llevaba a la pagina de consulta de saldo mediante la herramienta de desarrolladores de chrome. Ahora al realizar la primer conexion la cookie se guardara en nuestro contenedor de cookies, para conectarte a cualquier pagina ya logueado solo necesitas agregar esta cookie en las cabeceras a enviar de igual forma a como lo hiciste antes para loguearte y obtener la cookie :sunglasses: En resumen para crear un bot para iniciar sesion en un formulario web primero necesitaras conectarte a la pagina de login para obtener la cookie de sesion, luego incluir esta cookie a cualquier pagina que quieras acceder ya logueado. Para obtener la respuesta solo escribimos lo siguiente: HttpWebResponse respuesta = (HttpWebResponse)peticion.GetResponse(); StreamReader lector = new StreamReader(respuesta.GetResponseStream()); string html = lector.ReadToEnd(); donde la cadena html contendra el html de la pagina que solicitamos y desde ahi facilmente podremos obtener la informacion que buscamos. Bot para Iniciar Sesion en un Formulario Web de MiTelcel y obtener el Saldo de una Sim Post completo en: http://jonathanmelgoza.com/blog/bot-para-iniciar-sesion-en-un-formularioweb/#ixzz3CNTyn5ub