2012-05-29 2 views
0

Я пытаюсь загрузить отчет из Datacash через HTTP-сообщение, используя this page в качестве ссылки, и я не могу понять, где я ошибаюсь.Загрузка файла через HTTP-сообщение, где я ошибаюсь?

Мой метод ниже:

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(); 
} 

Прежде всего, пост выполняется. Но я всегда получаю файл с текстом «Ошибка: тип отчета не найден». Если я изменил URL-адрес, я получаю сообщение об ошибке, поэтому этот URL-адрес определенно отвечает на HTTP-сообщение. Я пробовал это с и без? в исходном URL-адресе и с и без? в начале строки сообщения.

Я уже пытался связаться с технической поддержкой Datacash, и они не могли мне помочь. Я отправил им код, который я использую, и все, что я получил, было то, что на их конце не было ничего плохого.

Учетные данные верны, пароль представляет собой комбинацию букв и цифр (без специальных символов).

Я знаю, что не многие из вас будут использовать datacash, но глядя на мой код и информацию here, есть ли что-то явно неправильное в том, что я делаю? Я собираюсь по кругу.

Thankyou

+0

Вы уверены, что все значения (группа, дата начала, дата окончания, тип) верны? Группа будет казаться вероятным кандидатом. Кроме того, может быть, что ASCII не является надлежащим кодированием данных формы в вашем веб-запросе. –

ответ

8

Ваш код кажется слишком сложным, что-то вроде этого. Попробуйте упростить:

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); 
    } 
}