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*