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

0

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

Спасибо

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

Ваш Ответ

1   ответ
9

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

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

Похожие вопросы