2010-06-20 88 views
0

我試圖使用C#(ASP.NET)下載遠程文件。問題是,當我瀏覽到文件下載URL - 它完美下載。當我嘗試WebClient.DownloadData(url)時,我得到「無數據顯示」響應。使用.NET遠程文件下載

如果我使用內置的VS2010瀏覽器瀏覽,我仍然會收到此「錯誤」消息。

文件鏈接是:http://www.tase.co.il/TASE/Pages/Export.aspx?sn=he-IL_ds&enumTblType=AllSecurities&Columns=he-IL_Columns&Titles=he-IL_Titles&TblId=0&ExportType=3 (CSV文件)

如何將文件下載?有任何想法嗎?

非常感謝

+0

當我點擊我的瀏覽器(FF)該鏈接時,我得到「沒有數據顯示」,所以它可能是基於會話尼克說。 – svick 2010-06-20 16:22:58

回答

0

這不是側的下載問題,即頁面引用的東西,可能是從會議......所以你需要登錄到該網站,獲得一個會話,基本上執行通常在路由中獲取文件的任何步驟,以便正確/可用。

如果我不得不猜測,我認爲他們會在你要求時將文件導出到文件系統,所以它是一個臨時文件,不是你可以抓取的東西,所以除非你去了通過創建它的步驟(似乎不是這個Export.aspx頁面所做的),它不會在那裏,它們的錯誤消息是「沒有數據顯示」。

也有可能他們明確阻止你,以防止發生任何形式的機器人/瘙癢......基本上阻止你正在嘗試做什麼。

+0

但這很奇怪 - 如果您嘗試瀏覽到該頁面,而沒有任何身份驗證,則可以下載該文件。 因此,我的猜測中沒有會話 - 只是某種堵塞? – Roman 2010-06-20 15:48:53

+0

@羅曼 - 可能有,被推薦人阻止,以防止我猜,這是一個非常常見的熱鏈接反措施。 – 2010-06-20 15:52:33

+0

如果是這樣,他們不會阻止直接瀏覽下載嗎?如果我直接瀏覽鏈接 - 他們沒有引薦者,因此會阻止我。他們不是嗎? – Roman 2010-06-20 16:02:49

0

許多網站將根據Referer或User-Agent標題阻止下載。

  1. 觀看「工作」下載帶有 Fiddler
  2. 看你的代碼的 下載使用Fiddler
  3. 比較 兩個請求
  4. 更新您的要求 相匹配的「工作」的情況。
0

我通過獲取遠程文件作爲流解決了這個問題。從那時起,我能夠讀取/寫入響應流。

//The absolute path to your file 
string remoteFile = "http://my.cloudfront.net/videos/vehicle_english_v3.mp4"; 

//The name of the file you want the user to see when they download the file 
int pos = remoteFile.LastIndexOf("/") + 1; 
string fileName = remoteFile.Substring(pos, remoteFile.Length - pos); 

//Obtain your file as a stream 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(remoteFile); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
Stream fileStream = response.GetResponseStream(); 

//Write the stream to the response 
if (fileStream != null && fileStream.CanRead) { 
    context.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); 
    context.Response.ContentType = "application/octet-stream"; 
    context.Response.ClearContent(); 
    fileStream.CopyTo(context.Response.OutputStream); 
}