0

このページを参照として使用して、HTTPポストを介してDatacashからレポートをダウンロードしようとしていますが、どこが間違っているのかわかりません。

私の方法は以下の通りです:

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は確実にHTTPPOSTに応答しています。私はこれを使って、または使わずに試しましたか?初期URLで、?の有無にかかわらず 投稿文字列の先頭。

私はすでにDatacashのテクニカルサポートに連絡しようとしましたが、彼らは私を助けることができませんでした。私が使用しているコードを彼らに送ったところ、彼らの側には何も問題がなかったというだけでした。

クレデンシャルは正しく、パスワードは文字と数字の組み合わせです(特殊文字は使用できません)。

datacashを使用したことのある人はそれほど多くないでしょうが、私のコードとここの情報を見ると、私がしていることに明らかに何か問題がありますか?私は輪になって回っています。

ありがとうございました

4

1 に答える 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);
    }
}
于 2012-05-29T15:04:19.333 に答える