2012-05-29 33 views
0

我試圖通過使用this page作爲參考的HTTP POST下載從Datacash的報告,我想不通我要去的地方錯了。通過HTTP Post下載文件,我在哪裏出錯?

我的方法是如下:

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

首先,執行崗位。但是我總是收到文件「錯誤:找不到報告類型」。如果我更改網址,則會收到錯誤消息,因此此網址肯定會響應HTTP發佈。我已經嘗試過這個,沒有?在最初的網址中,有沒有?在帖子字符串的開頭。

我已經嘗試與Datacash的技術支持取得聯繫,他們不能幫我。我向他們發送了我正在使用的代碼,而我回頭的是他們的結局沒有任何問題。

憑證正確,密碼是字母和數字(無特殊字符)的組合。

我知道你們中不會有很多人會使用datacash,但看着我的代碼和信息here,我在做什麼有什麼明顯的錯誤?我正在轉圈。

三江源

+0

確定所有的值(組,開始日期,結束日期,類型)是否正確?集團似乎是一個可能的候選人。此外,可能是因爲ASCII不是您Web請求中表單數據的正確編碼。 –

回答

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