【问题标题】:Downloading a file via an HTTP Post, where am I going wrong?通过 HTTP Post 下载文件,我哪里出错了?
【发布时间】:2016-10-20 19:02:53
【问题描述】:

我正在尝试使用this page 作为参考,通过 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();
}

首先,执行post。但我总是得到一个带有文本“错误:找不到报告类型”的文件。如果我更改 URL,我会收到一个错误,因此这个 URL 肯定会响应 HTTP 帖子。我试过这个有和没有?在初始 URL 中,有无 ?在帖子字符串的开头。

我已经尝试联系 Datacash 的技术支持,但他们无法帮助我。我将我正在使用的代码发送给他们,我得到的只是他们没有任何问题。

凭据正确,密码是字母和数字的组合(无特殊字符)。

我知道你们中没有多少人会使用过datacash,但是看看我的代码和here的信息,我正在做的事情有什么明显的错误吗?我在兜圈子。

谢谢

【问题讨论】:

  • 您确定所有值(组、开始日期、结束日期、类型)都正确吗?集团似乎是一个可能的候选人。此外,也可能是 ASCII 不是您 Web 请求中表单数据的正确编码。

标签: c# post


【解决方案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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-04
    • 2018-04-21
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多