I Bot para Iniciar Sesion en un Formulario Web

Anuncio
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
Descargar