Baixando um arquivo através de um HTTP Post, onde estou indo errado?

Eu estou tentando baixar um relatório do Datacash através de um post HTTP usando esta página como referência e não consigo descobrir onde estou indo errado.

Meu método está abaixo:

private static void DownloadDatacashData(int howManyDays) { string post, url, group, user, password, startDate, endDate, type, csvFile; url = "https://reporting.datacash.com/reporting2/csvlist?"; group = "123456"; user = "autoreport"; password = "foobar"; startDate = DateTime.Now.AddDays(howManyDays).ToString("yyyy-MM-dd"); endDate = DateTime.Now.ToString("yyyy-MM-dd"); type = "stl"; post = String.Format(@"group={0}&user={1}&password={2}&start_date={3}&end_date={4}&type={5}", group, user, password, startDate, endDate, type); var request = (HttpWebRequest)WebRequest.Create(url); request.KeepAlive = false; request.ProtocolVersion = HttpVersion.Version11; request.Method = "POST"; request.ContentLength = 0; var postBytes = Encoding.ASCII.GetBytes(post); request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postBytes.Length; var requestStream = request.GetRequestStream(); requestStream.Write(postBytes, 0, postBytes.Length); requestStream.Close(); var response = (HttpWebResponse)request.GetResponse(); var sr = new StreamReader(response.GetResponseStream()); csvFile = sr.ReadToEnd(); sr.Close(); var sw = new StreamWriter("C:\\foo\\bar.csv", false); sw.Write(csvFile); sw.Flush(); sw.Close(); } 

Primeiro de tudo, o post é realizado. Mas eu sempre recebo um arquivo com o texto “Error: Report type not found”. Se eu alterar o URL, recebo um erro para que esse URL responda definitivamente à postagem HTTP. Eu tentei isso com e sem o? no URL inicial e com e sem o? no início da sequência de postagens.

Eu já tentei entrar em contato com o suporte técnico da Datacash e eles não conseguiram me ajudar. Enviei-lhes o código que estou usando e tudo que voltei foi que não havia nada de errado em seu fim.

As credenciais estão corretas, a senha é uma combinação de letras e números (sem caracteres especiais).

Eu sei que muitos de vocês não terão usado datacash, mas olhando para o meu código e as informações aqui , há algo obviamente errado com o que estou fazendo? Eu estou andando em círculos.

Obrigado

Seu código parece muito complicado para algo assim. Tente simplificar:

 private static void DownloadDatacashData(int howManyDays) { var url = "https://reporting.datacash.com/reporting2/csvlist"; using (var client = new WebClient()) { var values = new NameValueCollection { { "group", "123456" }, { "user", "autoreport" }, { "password", "foobar" }, { "start_date", DateTime.Now.AddDays(howManyDays).ToString("yyyy-MM-dd") }, { "end_date", DateTime.Now.ToString("yyyy-MM-dd") }, { "type", "stl" }, }; byte[] result = client.UploadValues(url, values); File.WriteAllBytes("C:\\foo\\bar.csv", result); } }