2016-08-24 76 views
0

我試圖從SSRS報告中下載一個csv文件,使用下面的代碼。使用WebClient從SSRS報告下載CSV文件

Const URI As String = "https://blah.blah.com/blah/_layouts/15/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl=/blah/Production%20Reports/The_File.rdl&rs:format=csv" 
Const DESTINATION As String = "C:\MyFile.csv" 

Using myWebClient As WebClient = New WebClient() 
    With myWebClient 
     .Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8") 
     .Headers.Add("Accept-Encoding", "gzip, deflate, sdch, br") 
     .Headers.Add("Accept-Language", "en-US,en;q=0.8") 
     .Headers.Add("Content-Disposition", "attachment; filename=%22The%5FFile.csv%22") 
     .Headers.Add("Content-Encoding", "gzip") 
     .Headers.Add("Content-Type", "text/csv") 
     .Headers.Add("Vary", "Accept-Encoding") 
     .Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36") 
     .Headers.Add("Upgrade-Insecure-Requests", "1") 
     .Headers.Add("Referer", URI) 
     .Headers.Add("Cache-Control", "private") 

     .Credentials = New NetworkCredential("<my username>", "<my password>") 
     .DownloadFile(URI, DESTINATION) 
    End With 
End Using 

問題是下載的文件不是csv文件。當我在任何文本編輯器中打開它時,我所看到的都是「垃圾」字符,它們似乎正在進行某種編碼。如果我註釋掉「Accept-Encoding」頭並重新運行代碼,我會得到生成的HTML頁面的代碼 - 而不是我需要的csv文件。任何人都知道我可以如何正確下載文件?順便說一句,我不確定我添加的所有標題都是必需的。

回答

0

你需要的URI不斷從:

Const URI As String = "https://blah.blah.com/blah/_layouts/15/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl=/blah/Production%20Reports/The_File.rdl&rs:format=csv"

要這樣:

Const URI As String = "https://blah.blah.com/blah/_layouts/15/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl=/blah/Production%20Reports/The_File.rdl&rs:format=csv&rs:Command=Render"

你缺少URI的Command=Render一部分。

+0

我添加了Command = Render部分,但仍然獲得HTML頁面響應,而不是csv文件。 – user2148983

+0

您是否嘗試過這種方式,但沒有添加所有其他標題?因爲,我每個月都會運行類似的東西,而且我不需要添加所有這些來實現此目的。 –

+0

我刪除了所有添加的標題(User-Agent除外 - 這是避免獲取403 Forbidden錯誤所必需的),我仍然獲取HTML頁面代碼,而不是csv文件。 – user2148983