none
Erro - Tentativa de POST - HTML RRS feed

Respostas

  • Olavo, consegui fazer o POST...

    Faltava :

    request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)";
    

    • Marcado como Resposta .NET Dev terça-feira, 8 de novembro de 2011 23:12
    terça-feira, 8 de novembro de 2011 23:12

Todas as Respostas

  • Erro 500 é uma erro genérico retornado pelo servidor. 

    recomendo a você instalar o um sniffer de rede, por exemplo o fiddler http://www.fiddler2.com/fiddler2/ e tente rastrear o erro.


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Se for útil marque como resposta e faça um Developer feliz :)
    domingo, 6 de novembro de 2011 00:29
    Moderador
  • Além do que o Olavo falou, uma outra forma de você descobrir o que ouve no servidor onde você tentou dar um POST é usar o Chrome ou o Firefox.. é só apertar F12 e clicar na aba Network.. lá vai mostrar o tráfego na rede e a mensagem do erro 500
    Pedro Henrique B. Fernandes
    MCTS - .NET Framework 4, Data Access
    MCTS - .NET Framework 4, Web Applications
    Site: pedrofernandes.net
    domingo, 6 de novembro de 2011 01:04
  • Olavo, essa ferramenta me parece ser muito boa. Obrigado.

    Então ao tentar obter a resposta do servidor :

    WebResponse response = request.GetResponse();
    

    Então acontece a exceção 500.. Aparentemente o Request foi feito certo ok?

    Verifiquei no Sniffer Fiddler2 mas não encontrei exatamente aonde fica o erro que posso rastrear.. Na aba Inspectors, na parte inferior, tem informações sobre o response.. o que achei em RAW header foi:

    HTTP/1.1 500 Internal Server Error
    Server: ASP.NET Development Server/10.0.0.0
    Date: Mon, 07 Nov 2011 13:36:09 GMT
    X-AspNet-Version: 2.0.50727
    Cache-Control: private
    Content-Type: text/html; charset=utf-8
    Content-Length: 7260
    Connection: Close

    Em JSON:

    No Proxy-Authenticate Header is present.

    No WWW-Authenticate Header is present.

    Então no meu código fiz pra identificar se era um erro de protocolo:

     catch (WebException ex)
                {
                    if (ex.Status == WebExceptionStatus.ProtocolError) {
                        HttpWebResponse response = ex.Response as HttpWebResponse;
                        if (response != null) {
                            string exm = ex.Message;
                            // Process response
                            
                        }
    
                    }
    


    Realmente a execução entra na condição acima.. Mas como posso solucionar isso ???

     

     

    segunda-feira, 7 de novembro de 2011 13:44
  • seria  bom você colar todo o código aqui
    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Se for útil marque como resposta e faça um Developer feliz :)
    segunda-feira, 7 de novembro de 2011 13:51
    Moderador
  • O que eu fiz:
    
    
    public bool FazPOSTBB(string strOperacao)
            {
                string strPostData = "";
                string strURL      = "";
                bool   blnSucesso  = false;
                Stream respostaStream = null;
                switch (strOperacao)
    	        {
    		        case "Login":
                        
                        // Cria dados do POST e converte em um Array de bytes
                        strPostData = string.Format("chaveUsuario={0}&senhaUsuario={1}", "34324233", "333");
                        strURL = "https://www11.bb.com.br/site/res/index.jsp";
                        
                        blnSucesso = PostarUrl(strURL, strPostData , out respostaStream);
                        return blnSucesso;
                    default:
                        return false;
    	        }
            }
    
    
     public bool PostarUrl(string pstrUrl, string strRequest, out Stream pResposta)
            {
                try
                {
                    // Cria um objeto HttpRequest usando uma url que possa receber um POST
                    WebRequest request = WebRequest.Create(pstrUrl);
                    request.Proxy = null;
    
                    // Seta método de envio como POST
                    request.Method = "POST";
    
                    // Seta ContentType do WebRequest
                    request.ContentType = "application/x-www-form-urlencoded";
    
                    //Conversão dos dados em um Array de bytes
                    byte[] reqData = Encoding.UTF8.GetBytes(strRequest);
                    request.ContentLength = reqData.Length;
    
                    // Obtém request stream
                    Stream reqStream = request.GetRequestStream();
    
                    // Grava os dados no request stream
                    reqStream.Write(reqData, 0, reqData.Length);
    
                    // Fecha data stream
                    reqStream.Close();
    
                    // Obtém a resposta do servidor
                    WebResponse response = request.GetResponse();
    
                    // Pega status
                    strRetornoServidor = ((HttpWebResponse)response).StatusDescription;
    
                    // Obtém fluxo de dados obtidos pelo servidor
                    reqStream = response.GetResponseStream();
    
                    // Abre fluxo com stream reader
                    StreamReader reader = new StreamReader(reqStream);
    
                    // Lê retorno do servidor
                    strRetornoServidor += string.Format("\n{0}", reader.ReadToEnd());
    
                    if (reqStream != null) { pResposta = reqStream; return true; }
                    else { pResposta = null; return false; }
                }
                catch (WebException ex)
                {
                    if (ex.Status == WebExceptionStatus.ProtocolError) {
                        HttpWebResponse response = ex.Response as HttpWebResponse;
                        if (response != null) {
                            string exm = ex.Message;
                            // Process response
                            
                        }
    
                    }
                    throw;
                }
                  
            }
    		
    formato passado:
    Cabeçalhos de Respostaver fonte
    Date	Wed, 03 Aug 2011 18:25:50 GMT
    Transfer-Encoding	chunked
    Content-Type	text/html; charset=ISO-8859-1
    Cabeçalhos de Solicitaçãover fonte
    Host	www11.bb.com.br
    User-Agent	Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0.1) Gecko/20100101 Firefox/5.0.1
    Accept	text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language	pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding	gzip, deflate
    Accept-Charset	ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Connection	keep-alive
    Referer	https://www11.bb.com.br/site/res/index.jsp
    Cookie	JSESSIONID=631wT5SNYwkmlnk2svPwJjLPHXgRWNlhnhdh3hJ5VwVFPyhtHBQ4!1707942565
    
    Parâmetros   application/x-www-form-urlencoded
    botaoOK.x	17
    botaoOK.y	6
    chaveUsuario	34324233
    senhaUsuario	333
    Fonte
    Content-Type: application/x-www-form-urlencoded Content-Length: 63 chaveUsuario=34324233&senhaUsuario=333&botaoOK.x=17&botaoOK.y=6
    
    

    segunda-feira, 7 de novembro de 2011 14:02
  • Amigo, o site do banco do brasil permite POST desta maneira ? 
    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Se for útil marque como resposta e faça um Developer feliz :)
    segunda-feira, 7 de novembro de 2011 15:49
    Moderador
  • Acredito que sim Olavo..

    Você chegou a verificar ai? Será que é por ser HTTPS ??

    obrigado

    segunda-feira, 7 de novembro de 2011 16:11
  • Acredito que é por se tratar de um banco. eles tem vários sistemas de seguranças. 
    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Se for útil marque como resposta e faça um Developer feliz :)
    segunda-feira, 7 de novembro de 2011 16:18
    Moderador
  • Mas a implementação está correta ne..

    Você acredita mesmo que seja questão de segurança então...

    segunda-feira, 7 de novembro de 2011 17:09
  • acredito sim, não creio que você consiga interagir com sites de bancos desta maneira. existem formas, protocolos e webservices para isto
    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Se for útil marque como resposta e faça um Developer feliz :)
    segunda-feira, 7 de novembro de 2011 17:13
    Moderador
  • Olavo, consegui fazer o POST...

    Faltava :

    request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)";
    

    • Marcado como Resposta .NET Dev terça-feira, 8 de novembro de 2011 23:12
    terça-feira, 8 de novembro de 2011 23:12