我試圖從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文件。任何人都知道我可以如何正確下載文件?順便說一句,我不確定我添加的所有標題都是必需的。
我添加了Command = Render部分,但仍然獲得HTML頁面響應,而不是csv文件。 – user2148983
您是否嘗試過這種方式,但沒有添加所有其他標題?因爲,我每個月都會運行類似的東西,而且我不需要添加所有這些來實現此目的。 –
我刪除了所有添加的標題(User-Agent除外 - 這是避免獲取403 Forbidden錯誤所必需的),我仍然獲取HTML頁面代碼,而不是csv文件。 – user2148983