Iniciar sesion en web con C#

Iniciado por Kaxperday, 24 Noviembre 2014, 16:33 PM

0 Miembros y 1 Visitante están viendo este tema.

Kaxperday

#10
SI FUNCIONAA!!! :)

Mil gracias aun no me lo creo, así es introduce login correcto y funcionó :)), me estudiare ese code con detalle, MIL gracias, ahora probaré a crear un tema con ese inicio de sesión o algo, pero que raro no? no necesito cookies? xD (mejor!), ahora para respondercrear un tema o un mensaje supongo que deberé hacer HttpWebRequest y cargar las varibles como al inicio de sesión, no sé iré probando.

Mil gracias por dedicarle el tiempo maestro ;-) ;-) ;-)

Bueno socio tengo una duda, estoy intentando crear un mensaje con esa sesión y claro tendría que hacerlo con el httprequest anterior que ya inicio sesion correctamente, pero la direccion es otra en el http request pues ya no es la url de /login ahora es la te un /temacualquieraquesea, debo crear otra httprequest, como podría hacerlo aprovechando el inicio de sesion de la anterior, he probado lo siguiente pero no escribe nada:

Código (csharp) [Seleccionar]
string postData = "email=user&password=pass";
            byte[] byteData = ASCIIEncoding.ASCII.GetBytes(postData);
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://pagina.com/user/login");
            req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            //req.Connection = "keep-alive";
            req.ContentType = "application/x-www-form-urlencoded";
            req.ContentLength = byteData.Length;
            req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0";
            req.Host = "pagina.com";
            req.Method = "POST";
            req.Proxy = null;
            using (Stream reqStream = req.GetRequestStream())
                reqStream.Write(byteData, 0, byteData.Length);
            //Cojemos respuesta.
            HttpWebResponse response = (HttpWebResponse)req.GetResponse();
            using (Stream responseStream = response.GetResponseStream())
            {
                using (StreamReader sr = new StreamReader(responseStream))
                {
                    string responseData = sr.ReadToEnd();
                    if (!responseData.Contains("Iniciar se"))
                        MessageBox.Show("Login successful!");
                    else
                        MessageBox.Show("Login failed!");
                }
            }
            string directorio = Directory.GetCurrentDirectory();
            string linea, mensaje;
            StreamReader reader = new StreamReader(directorio + "\\Temas.txt");
            StreamReader readel = new StreamReader(directorio + "\\MisRespuestas.txt");
            detenerRespuestas = false;
            do
            {
                linea = reader.ReadLine();
                mensaje = readel.ReadLine();
                if(linea == "" || mensaje == "" || detenerRespuestas == true)
                {
                    break;
                }
                string postData2 = "qaa_content=" + mensaje + "&action=reply";
                byte[] byteData2 = ASCIIEncoding.ASCII.GetBytes(postData2);
                HttpWebRequest req2 = (HttpWebRequest)HttpWebRequest.Create(linea);
                req2.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                req2.ContentType = "application/x-www-form-urlencoded";
                req2.ContentLength = byteData2.Length;
                req2.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0";
                req2.Host = "pagina.com";
                req2.Method = "POST";
                req2.Proxy = null;
                req2.CookieContainer = req.CookieContainer;
                req2.Credentials = req.Credentials;
               
                using (Stream reqStream = req2.GetRequestStream())
                    reqStream.Write(byteData2, 0, byteData2.Length);
                MessageBox.Show(linea + mensaje);
            } while (linea != "" || detenerRespuestas == false);


Tambien probé a cambiar el requestUri pero era de solo lectura asi que parece que hay que crear otro httprequest nuevo, supongo necesitara las cookies del otro para poder mandar la respuesta o el mensaje en el tema, pero ya se las puse y no fue mm..

Saludos socio.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

kub0x

Cita de: Kaxperday en 29 Noviembre 2014, 19:37 PM
Bueno socio tengo una duda, estoy intentando crear un mensaje con esa sesión y claro tendría que hacerlo con el httprequest anterior que ya inicio sesion correctamente, pero la direccion es otra en el http request pues ya no es la url de /login ahora es la te un /temacualquieraquesea, debo crear otra httprequest, como podría hacerlo aprovechando el inicio de sesion de la anterior, he probado lo siguiente pero no escribe nada:

Para postear tienes que estar logeado, por lo que tendrás que coger la cookie de sesión de la respuesta no de la request. Cuando tengas la cookie de la response, abres una nueva request al foro donde vas a postear y le pones la cookie de la respuesta anterior. Supongo que con eso debería de valer ;)

En resumen: ten en cuenta las cookies de la respuesta del login.

Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


Kaxperday

Gracias socio, vaya parece que me da error al iniciar sesión ahora, el código que antes me funcionaba y ponía login sucessfull, ahora no funciona y al usar GetResponse() me da error en server remoto 407, el mismo código que antes me funcionaba. Así que no puedo probar nada, sin embargo con firefox puedo iniciar sesión en la cuenta sin problemas.

Así que no he podido probar lo de las cookies, de todas formas creo que lo probé a hacer con las de respuesta anteriormente y no dió resultado pero ahora no te lo puedo confirmar.

Saludos.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

.::IT::.

#13
debes usar cookies para almacenar las que te devuelve el servidor
CookieContainer myCookie;

luego a tu HttpWebRequest se la asignas:

req.CookieContainer = myCookie;

Y esta Cookie debe ser unica en todo el programa y siempre se la asignas a cualquier HttpWebRequest que vas usar para Hacer peticiones al servidor.


Simplemente .::IT::.

Kaxperday

No se trata de eso, no puedo iniciar sesión si que puedo descargar foros y temas pero iniciar sesión me devuelve un error que no depende del programa y que mandan el servidor ERROR 407 EXPECTATION FAILED. Antes no me ocurría este error y podía iniciar sesión perfectamente, no es que hayan bloqueado mi ip ni mi cuenta porque con mozilla puedo entrar en la cuenta. ¿Qué puede ser el causante de este error que antes no aparecía y como solucionarlo?. Gracias.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

kub0x

Aupa!

Cuando tenga un rato libre le echo un vistazo, es raro lo que comentas ya que yo te dejé un código funcional que tu mismo aseguraste que funcionaba. Lo adaptaré para que tenga en cuenta las cooks.

P.D = Editaré este mismo post cuando tenga tiempo así que estate al loro!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


Kaxperday

Ok gracias, si, el mismo código que antes me funcionaba ahora no lo hace me sale error 407, antes me ponia login succesful xD, muy raro la verdad jaja cuando quieras socio no hay prisa yo siempre ando turulando por aquí gracias.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

kub0x

Que raro, he abierto otra cuenta basura en el foro ese y me logea perfectamente.

Si añades este code al final del método GetResponse que postee podrás ver la cookie de sesión la cual debes de mantener en todas las request vinculadas a tu login, sino el servidor no podrá reconocerte como usuario.

Código (csharp) [Seleccionar]
foreach (Cookie cook in response.Cookies)
                Console.WriteLine("Name:{0} Value:{1}",cook.Name, cook.Value);


Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


Kaxperday

#18
Vaya lo que pasa es que eso no puedo hacerlo porque el programa deja de responder:

Código (csharp) [Seleccionar]
private static void SendRequest()
          {
              string postData = "email=loquesea@hotmail.com&password=blabla";
              byte[] byteData = ASCIIEncoding.ASCII.GetBytes(postData);
              HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create("http://pagina.com/user/login");
              req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
              //req.Connection = "keep-alive";
              req.ContentType = "application/x-www-form-urlencoded";
              req.ContentLength = byteData.Length;
              req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0";
              req.Host = "pagina.com";
              req.Method = "POST";
              req.Proxy = null;
              using (Stream reqStream = req.GetRequestStream())
                  reqStream.Write(byteData, 0, byteData.Length);
              GetResponse(req);
          }
   
          private static void GetResponse(HttpWebRequest req)
          {
              HttpWebResponse response = (HttpWebResponse) req.GetResponse();
              using (Stream responseStream = response.GetResponseStream())
              {
                  using (StreamReader sr = new StreamReader(responseStream))
                  {
                      string responseData = sr.ReadToEnd();
                      if (!responseData.Contains("Iniciar se"))
                          Console.WriteLine("Login successful!");
                      else
                          Console.WriteLine("Login failed!");
                  }
              }
              foreach (Cookie cook in response.Cookies)
                  Console.WriteLine("Name:{0} Value:{1}", cook.Name, cook.Value);
          }


Y no puede mostrar nada he probado a poner login falso en el POST y falla igual, no hay manera, y si no hago POST enviando datos no falla y me pone login failed, pero cuando hago un POST con el email y pass falla PD WTF, creo que es algo independiente de la cuenta, WTF.

Da error en la línea 14, no entiendo, lo he probado en otro programa también, incluso con otra IP, buscaré acerca de ese error de nuevo haber si hay alguna solución :/.

Gracias.

Edito: Error HTTP 407 puede ser que el robots.txt sea capaz de detectarlo de alguna forma, mmm probé a cambiar el agente de navegador fallaba igual, mm pero es raro a ti el mismo código te funciona. ¿con qué criterios lo bloquea entonces?, lo pensaré, saludos.

He seguido leyendo y dice que este error que devuelve el servidor suele ser porque se requiere autentificación de proxy.

Aaamigo mío creo que ya lo voy pillando lo que ocurre es que me debe de redirigir a otra página porque ha detectado que soy un robot y allí debo autentificarme para demostrar que no lo soy, y al no autentificarme me sale ese error, leyendo de aquí.

La autentificación que pide, es solo conocida para el servidor. Parece que este ordenador le tiene calado, lo que no entiendo es como me ha podido bloquear a mí y a ti no, que tiene tu ordenador diferente del mío para ellos que hace que mi ordenador sea bloqueado xP, interesante.

Contenido de robots.txt

CitarUser-agent: *
Disallow: /al/

Hehe desconozcía como funcionaba lo de robots.txt, he estado leyendo, si he entendido bien no debería de influir ahí lo que hace sería  denegar la entrada a ese directorio a cualquier usuario de navegación, usado principalmente para ocultar esos directorios de los searchs engines, aquí lo leí, saludos.

Vaya vaya vaya, creo que estopuede ser el causante del problema, el problema no es que la página detecto mi bot, es un fallo de visual studio, pues estaba haciendo otro programa para iniciar sesión y sorpresa ocurre lo mismo, entonces pensé que MVS13 era el culpable, intentaré solucionarlo.

OMG he probado mil cosas como esta, desesperante omg, he leido me he instalado postsharp no va a arreglar nada pero puede ser el sustitutivo, al final creo que aqui está la solucion pero ¿a que proxy se refiere?, de todas formas en la aplicacion en el httprequest usimos req.proxy=null; horrible PD

Vale, me he mudado y me funciona la aplicación con el inicio de sesión WTF, quizás era un problema de router o lo que sea. El caso que hace login sucessful tengo esto:

Código (csharp) [Seleccionar]
string postData = "email=dfdf@hotmail.com&password=dfd";
            byte[] byteData = ASCIIEncoding.ASCII.GetBytes(postData);
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://pagina.com/user/login");
            req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            //req.Connection = "keep-alive";
            req.ContentType = "application/x-www-form-urlencoded";
            req.ContentLength = byteData.Length;
            req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0";
            req.Host = "pagina.com";
            req.Method = "POST";
            req.Proxy = null;
            using (Stream reqStream = req.GetRequestStream())
                reqStream.Write(byteData, 0, byteData.Length);
            //Cojemos respuesta.
            HttpWebResponse response = (HttpWebResponse)req.GetResponse();
            using (Stream responseStream = response.GetResponseStream())
            {
                using (StreamReader sr = new StreamReader(responseStream))
                {
                    string responseData = sr.ReadToEnd();
                    if (!responseData.Contains("Iniciar se"))
                        MessageBox.Show("Login successful!");
                    else
                        MessageBox.Show("Login failed!");
                }
            }
            string directorio = Directory.GetCurrentDirectory();
            string linea, mensaje;
            StreamReader reader = new StreamReader(directorio + "\\Temas.txt");
            StreamReader readel = new StreamReader(directorio + "\\MisRespuestas.txt");
            detenerRespuestas = false;
            do
            {
                linea = reader.ReadLine();
                mensaje = readel.ReadLine();
                MessageBox.Show("###1111 " + linea + mensaje);
                if (linea == "" || mensaje == "" || detenerRespuestas == true)
                {
                    break;
                }
                string postData2 = "qaa_content=" + mensaje + "&action=reply";
                byte[] byteData2 = ASCIIEncoding.ASCII.GetBytes(postData2);
                HttpWebRequest req2 = (HttpWebRequest)HttpWebRequest.Create(linea + "?Add=1");
                req2.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                req2.ContentType = "application/x-www-form-urlencoded";
                req2.ContentLength = byteData2.Length;
                req2.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0";
                req2.Host = "pagina.com";
                req2.Method = "POST";
                req2.Proxy = null;
                req2.CookieContainer.Add(response.Cookies);
                using (Stream reqStream = req2.GetRequestStream())
                    reqStream.Write(byteData2, 0, byteData2.Length);
                MessageBox.Show(linea + mensaje);
            } while (linea != "" || detenerRespuestas == false);


Pero no postea nada, ¿estoy añadiendo bien las cookies?, saludos.
Hasta mañana.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

Kaxperday

Hola a todos, ya me funciona todo correctamente el programa inicia sesión y realiza POST sobre los temas o directorios de la página para ganar puntos, lo demás ya es programación sencilla, le doy las gracias a kubox por todo, sin él no lo habría conseguido, el código para mandar POST con las cookies es el siguiente, solo había que crear un cookiecontainer, gracias.

Código (csharp) [Seleccionar]

string postData = "email=terearr@hotmail.com&password=topotamadre";
           byte[] byteData = ASCIIEncoding.ASCII.GetBytes(postData);
           CookieContainer cc = new CookieContainer();
           HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://pagina/user/login");
           req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
           //req.Connection = "keep-alive";
           req.CookieContainer = cc;
           req.ContentType = "application/x-www-form-urlencoded";
           req.ContentLength = byteData.Length;
           req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0";
           req.Host = "pagina.com";
           req.Method = "POST";
           req.Proxy = null;
           using (Stream reqStream = req.GetRequestStream())
               reqStream.Write(byteData, 0, byteData.Length);
           //Cojemos respuesta.
           HttpWebResponse response = (HttpWebResponse)req.GetResponse();
           using (Stream responseStream = response.GetResponseStream())
           {
               using (StreamReader sr = new StreamReader(responseStream))
               {
                   string responseData = sr.ReadToEnd();
                   if (!responseData.Contains("Iniciar se"))
                       MessageBox.Show("Login successful!");
                   else
                       MessageBox.Show("Login failed!");
               }
           }
           string directorio = Directory.GetCurrentDirectory();
           string linea, mensaje;
           StreamReader reader = new StreamReader(directorio + "\\Temas.txt");
           StreamReader readel = new StreamReader(directorio + "\\MisRespuestas.txt");
           detenerRespuestas = false;
           do
           {
               linea = reader.ReadLine();
               mensaje = readel.ReadLine();
               MessageBox.Show("###1111 " + linea + mensaje);
               if (linea == "" || mensaje == "" || detenerRespuestas == true)
               {
                   break;
               }
               string postData2 = "qaa_content=" + mensaje + "&action=reply";
               byte[] byteData2 = ASCIIEncoding.ASCII.GetBytes(postData2);
               HttpWebRequest req2 = (HttpWebRequest)HttpWebRequest.Create(linea + "?Add=1");
               req2.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
               req2.ContentType = "application/x-www-form-urlencoded";
               req2.ContentLength = byteData2.Length;
               req2.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0";
               req2.Host = "pagina.com";
               req2.Method = "POST";
               req2.Proxy = null;
               req2.CookieContainer = cc;
               using (Stream reqStream = req2.GetRequestStream())
                   reqStream.Write(byteData2, 0, byteData2.Length);
               MessageBox.Show(linea + mensaje);
           } while (linea != "" || detenerRespuestas == false);


Tema zanjado.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.