我正在使用WebClient.DownloadFile下载一个小的可执行文件从互联网。这种方法效果很好。但是,我现在想将这个可执行文件下载到一个字节数组中,而不是下载到我的硬盘上。我读了一些书,偶然发现了WebClient.DownloadData方法。downloadData方法的问题是,我的代码不是下载我的文件,而是下载文件下载页面后面的HTML。
我试过使用数十个网站-每个网站都给我带来了同样的问题。下面是我正在使用的代码。
// 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请记住,我正在尝试将可执行文件的数据下载到字节数组中。
谢谢你的帮助,埃文
发布于 2011-07-10 03:59:41
您正在尝试使用过期的令牌url下载文件。见下文:
网址:http://www35.multiupload.com:81/files/4D7B4D2BFC3F1A9F765A433BA32ED2C5883D0CE133154A0FDB7E7786547A3165DA62393141C4AF8FF36C75222566CF3EB64AF6FBCFC02099BB209C891529CF7B90C83D9C63D39D989CBB8ECE6DE2B83B/Project1.exe`
服务器:www35
令牌:4D7B4D2BFC3F1A9F765A433BA32ED2C5883D0CE133154A0FDB7E7786547A3165DA62393141C4AF8FF36C75222566CF3EB64AF6FBCFC02099BB209C891529CF7B90C83D9C63D39D989CBB8ECE6DE2B83B
您不能仅仅通过等待计时器结束并复制直接链接来下载文件,它是一个“令牌”链接。在将您重定向回下载页之前,它只能工作一段时间(这就是为什么您要获得HTML而不是二进制数据)。
解决方案
您必须下载multiupload的HTML并解析HTML源代码中的直接下载链接。只有这种方式提供了一种获得最新令牌url的可靠方法。
发布于 2011-07-10 04:12:18
@Dark Slipstream说,您正在尝试使用过期的令牌url下载一个文件,看看如何获得新的url:
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; 我不解析异常
https://stackoverflow.com/questions/6639044
复制相似问题