首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebClient.DownloadFile对WebClient.DownloadData

WebClient.DownloadFile对WebClient.DownloadData
EN

Stack Overflow用户
提问于 2011-07-10 03:47:55
回答 2查看 24.9K关注 0票数 1

我正在使用WebClient.DownloadFile下载一个小的可执行文件从互联网。这种方法效果很好。但是,我现在想将这个可执行文件下载到一个字节数组中,而不是下载到我的硬盘上。我读了一些书,偶然发现了WebClient.DownloadData方法。downloadData方法的问题是,我的代码不是下载我的文件,而是下载文件下载页面后面的HTML。

我试过使用数十个网站-每个网站都给我带来了同样的问题。下面是我正在使用的代码。

代码语言:javascript
复制
// Create a new instance of the System.Net 'WebClient'
        System.Net.WebClient client = new System.Net.WebClient();

        // Download URL
        Uri uri = new Uri("http://www35.multiupload.com:81/files/4D7B4D2BFC3F1A9F765A433BA32ED2C5883D0CE133154A0FDB7E7786547A3165DA62393141C4AF8FF36C75222566CF3EB64AF6FBCFC02099BB209C891529CF7B90C83D9C63D39D989CBB8ECE6DE2B83B/Project1.exe");

        byte[] dbytes = client.DownloadData(uri);

        MessageBox.Show(dbytes.Length.ToString()); // Not the size of my file

请记住,我正在尝试将可执行文件的数据下载到字节数组中。

谢谢你的帮助,埃文

EN

回答 2

Stack Overflow用户

发布于 2011-07-10 03:59:41

您正在尝试使用过期的令牌url下载文件。见下文:

网址:http://www35.multiupload.com:81/files/4D7B4D2BFC3F1A9F765A433BA32ED2C5883D0CE133154A0FDB7E7786547A3165DA62393141C4AF8FF36C75222566CF3EB64AF6FBCFC02099BB209C891529CF7B90C83D9C63D39D989CBB8ECE6DE2B83B/Project1.exe`

服务器:www35

令牌:4D7B4D2BFC3F1A9F765A433BA32ED2C5883D0CE133154A0FDB7E7786547A3165DA62393141C4AF8FF36C75222566CF3EB64AF6FBCFC02099BB209C891529CF7B90C83D9C63D39D989CBB8ECE6DE2B83B

您不能仅仅通过等待计时器结束并复制直接链接来下载文件,它是一个“令牌”链接。在将您重定向回下载页之前,它只能工作一段时间(这就是为什么您要获得HTML而不是二进制数据)。

解决方案

您必须下载multiupload的HTML并解析HTML源代码中的直接下载链接。只有这种方式提供了一种获得最新令牌url的可靠方法。

票数 3
EN

Stack Overflow用户

发布于 2011-07-10 04:12:18

@Dark Slipstream说,您正在尝试使用过期的令牌url下载一个文件,看看如何获得新的url:

代码语言:javascript
复制
 System.Net.WebClient client = new System.Net.WebClient();

        // Download URL
        Uri uri = new Uri("http://www.multiupload.com/39QMACX7XS");

        byte[] dbytes = client.DownloadData(uri);
        string responseStr = System.Text.Encoding.ASCII.GetString(dbytes);
        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(responseStr);
        string urlToDownload = doc.DocumentNode.SelectNodes("//a[contains(@href,'files/')]")[0].Attributes["href"].Value;
        byte[] data = client.DownloadData(uri);
        length = data.Length; 

我不解析异常

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6639044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档