none
Usando HttpWebRequest para saber se usuario e senha são validos RRS feed

  • Pergunta

  • Oi todo mundo,

    Estou desenvolvendo uma aplicação em asp.net com c# para enviar usuário e senha para um site e receber a resposta do mesmo.

    Agora vem a pergunta, como vou saber se o usuário e senha passados fizeram login com sucesso no site?

    Ele realiza o processo depois do clique de um botão.

    Segue o Código para Analise.

    Desde já agradeço a todos.

     public string Requisicao(string usuario,string senha)
            {
                CookieContainer cookies = new CookieContainer();
                ICredentials credencial = new NetworkCredential(usuario,senha);            
                
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://servidorcliente/AVRWEBPublisher/loginDialog.aspx"); // pode ser qualquer site como por ex outlook.com
                req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)";
                req.Method = "POST";
                req.CookieContainer = cookies;
                req.Credentials = credencial;
                req.AllowAutoRedirect = true;
                req.AllowWriteStreamBuffering = true;
                req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                req.Headers.Add("Accept-Language:en-us,en;q=0.5");
                req.Headers.Add("Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7");
                req.KeepAlive = true;
                req.Headers.Add("Keep-Alive: 300");
                req.Referer = "http://servidorcliente/AVRWEBPublisher/loginDialog.aspx");
                req.ContentType = "application/x-www-form-urlencoded";
                
                StreamWriter sw = new StreamWriter(req.GetRequestStream());
                sw.Write(credencial);
                
                sw.Close();
                HttpWebResponse response = (HttpWebResponse)req.GetResponse();
    
    // como sei que o usuario e senha logaram??
    
                StreamReader reader = new StreamReader(response.GetResponseStream());
                string tmp = new StreamReader(response.GetResponseStream()).ReadToEnd();
                
                
                foreach (Cookie cook in response.Cookies)
                {
                    tmp += "\n" + cook.Name + ": " + cook.Value;
                }
                Response.Write(tmp);
                Response.End();
                return tmp;
    
    
            }
    

    quarta-feira, 27 de novembro de 2013 13:49

Respostas

  • Olá,

    Geralmente quando o login é feito com sucesso, a aplicação faz redirecionamento. Então você pode verifica o código  resposta HTTP. Na casa do 3xx é codigo de redirecionamento.

    http://msdn.microsoft.com/pt-br/library/system.net.httpwebresponse.statuscode%28v=vs.110%29.aspx

    • Marcado como Resposta Rainer-Miranda terça-feira, 10 de dezembro de 2013 15:15
    quarta-feira, 27 de novembro de 2013 22:21
    Moderador
  • Consegui

    No meu caso tive que passar os dados desta forma

     Response.Write("<form id=form1 action='http://Pagina.aspx' method='POST'>");
                Response.Write("<input name=Login1$UserName type=text id=Login1_Username value="+ user +"/>");
                Response.Write("<input name=Login1$Password type=password id=Login1_Password value="+senha+"/>");
                Response.Write("<input type=submit name=Login1$LoginButton id=Login1_LoginButton onclientclick=True>");
                Response.Write("</form>");
                Response.Write("<script>form1.submit();</script>");	

    E depois validar por uma Session

    Obrigado Welington Jr, pela ajuda


    • Marcado como Resposta Rainer-Miranda terça-feira, 10 de dezembro de 2013 15:15
    • Editado Rainer-Miranda terça-feira, 10 de dezembro de 2013 15:18 Edit
    terça-feira, 10 de dezembro de 2013 15:15

Todas as Respostas

  • Olá,

    Geralmente quando o login é feito com sucesso, a aplicação faz redirecionamento. Então você pode verifica o código  resposta HTTP. Na casa do 3xx é codigo de redirecionamento.

    http://msdn.microsoft.com/pt-br/library/system.net.httpwebresponse.statuscode%28v=vs.110%29.aspx

    • Marcado como Resposta Rainer-Miranda terça-feira, 10 de dezembro de 2013 15:15
    quarta-feira, 27 de novembro de 2013 22:21
    Moderador
  • Mas o que acontece, que o Statuscode apenas recebe a resposta se os parâmetros foram enviados para a pagina com sucesso e não se efetuou o login com sucesso, ou seja, mesmo colocando um usuário e senha errados a resposta do statuscode é sempre ok. 

    Neste caso creio eu que o statuscode serve mais para validação de pagina do que de usuário.

    Mas, obrigado pela resposta!

    quinta-feira, 28 de novembro de 2013 11:04
  • Mas se você colocou usuario e senha certo, o código de retorno veio 200 ou ok?
    quinta-feira, 28 de novembro de 2013 13:36
    Moderador
  • Vem somente OK.

    independente do usuário a resposta que vem é sempre OK.

    tanto para um StatusCode ou StatusDescription, agora a minha duvida é quando ele irar receber a resposta 200 ou 3xx?

    quinta-feira, 28 de novembro de 2013 15:23
  • Mais alguém pode ajudar?
    terça-feira, 3 de dezembro de 2013 11:30
  • Consegui

    No meu caso tive que passar os dados desta forma

     Response.Write("<form id=form1 action='http://Pagina.aspx' method='POST'>");
                Response.Write("<input name=Login1$UserName type=text id=Login1_Username value="+ user +"/>");
                Response.Write("<input name=Login1$Password type=password id=Login1_Password value="+senha+"/>");
                Response.Write("<input type=submit name=Login1$LoginButton id=Login1_LoginButton onclientclick=True>");
                Response.Write("</form>");
                Response.Write("<script>form1.submit();</script>");	

    E depois validar por uma Session

    Obrigado Welington Jr, pela ajuda


    • Marcado como Resposta Rainer-Miranda terça-feira, 10 de dezembro de 2013 15:15
    • Editado Rainer-Miranda terça-feira, 10 de dezembro de 2013 15:18 Edit
    terça-feira, 10 de dezembro de 2013 15:15