Array
(
)

METODO POST - PROBLEMAS

Bandheid
   - 25 ago 2009

Estou passando um programa que havia feito anteriormente em Java, para C#. E sua principal função era a seguinte:

Em determinado ponto da execução, ele entrava em um site(https), criava as credenciais necessárias, realizava um post para a página contendo um código de transmissão e a mesma retornava um arquivo .zip, de acordo com o código fornecido... então o programa pegava esse retorno e salvava em um diretório.

Ok, fui pesquisar o método post em C, encontrei várias referencias pela internet e utilizei...

O código está fazendo as credenciais como esperado, e realizando o post, porém, a página não encontra o conteúdo do Header que envio com a informação do código de transmissão, e me retorna uma mensagem padrão do sistema deles, em html: ´Código de transmissão não encontrado´.

Estou a alguns dias vasculhando a internet, porém tudo que encontro é muito semelhante ao o que eu já realizei:

#Código

           clsInfBanco objBanco = new clsInfBanco();
            DataTable dtInformacoes = objBanco.DadosAcessoWebTran();
            int iPorcentagem = 0;

            foreach (DataRow linha in dtInformacoes.Rows)
            {
                try
                {
                    HttpWebRequest requisicao = (HttpWebRequest)
                    WebRequest.Create("https://siteexemplo.com/transmicao");
                   

                    NetworkCredential login = new NetworkCredential(linha["DESCR_USUARIO"].ToString(),  linha["DESCR_SENHA"].ToString());
                    
                    requisicao.Credentials = login;

                    
                   
                    string sRequisicao = linha["COD_DIARIO"].ToString();
                    requisicao.Headers.Set("CODTRAN",sRequisicao);
                    requisicao.ProtocolVersion = HttpVersion.Version11;
                    requisicao.Method = "POST";
                    HttpWebResponse resposta = (HttpWebResponse)requisicao.GetResponse();


                    resposta.Headers.Set("CODTRAN", sRequisicao);
                    Stream arquivoOrigem = resposta.GetResponseStream();
                    FileStream arquivoFisico = new FileStream(string.Format(@"C:\Baixando\{0}.zip", linha["DESCR_EMPRESA"]), FileMode.Create, FileAccess.Write);

                    this.EscreveArquivoFisico(arquivoOrigem, arquivoFisico, lbl);

                    iPorcentagem = pb.Value;

                    pb.Value = (iPorcentagem += Convert.ToInt32(100/dtInformacoes.Rows.Count ));
                    lbl.Text = linha["COD_DIARIO"].ToString() + " sendo Baixado";
                }
                catch (Exception ex)
                {
                    lbl.Text = (ex.Message);
                }
                
            }



        }

        private void EscreveArquivoFisico(Stream arquivoOrigem, Stream arquivoFisico, System.Windows.Forms.Label lbl)
        {
            try
            {
                int tamanho = 4096;
                Byte[] buffer = new Byte[tamanho];
                int bytesLeitura = arquivoOrigem.Read(buffer, 0, tamanho);

                while (bytesLeitura > 0)
                {
                    arquivoFisico.Write(buffer, 0, bytesLeitura);
                    bytesLeitura = arquivoOrigem.Read(buffer, 0, tamanho);
                }

                arquivoOrigem.Close();
                arquivoFisico.Close();
            }
            catch (Exception ex)
            {
                arquivoOrigem.Close();
                arquivoFisico.Close();
                lbl.Text = ex.Message;
            }
        }


Vocês conseguem ver algo que não percebi ainda?... Desde já, muito obrigado.

Bandheid
   - 25 ago 2009

*Ignorem a linha do código:
resposta.Headers.Set(´CODTRAN´, sRequisicao);
Estava fazendo um teste e não a apaguei*