2010-06-20 103 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); 
}