Скачивая файл через HTTP Post, где я ошибаюсь?

Я пытаюсь загрузить отчет из Datacash через сообщение 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, но смотрят на мой код и информациюВотЧто-то не так с тем, что я делаю? Я хожу по кругу.

Спасибо

 Sean H29 мая 2012 г., 17:15
Вы уверены, что все значения (группа, дата начала, дата окончания, тип) верны? Группа показалась бы вероятным кандидатом. Также может быть, что ASCII не является правильной кодировкой для данных формы в вашем веб-запросе.

Ответы на вопрос(1)

Решение Вопроса

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

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

Ваш ответ на вопрос