c# - C# webclient 下载最新的CCleaner
问题描述
如何更改我的 C# 下载方法,以便它从重定向到它的给定链接获取最终下载链接。现在我有兴趣获得 CCleaner 的最后一个便携式版本,可以使用浏览器从https://www.ccleaner.com/ccleaner/download/portable获取。
这是我目前的下载方法:
public void downloadFile(String address, String filename)
{
WebClient down = new WebClient();
down.Headers.Add(HttpRequestHeader.UserAgent,"Mozilla/5.0 (compatible; http://example.org/)");
down.DownloadFileAsync(new Uri(address), filename);
}
当然,在给定的链接上使用它会导致下载一个似乎是 html 页面本身的文件。我的项目是并且需要是 net3.5 并且下载必须是异步的。知道我怎么能做到这一点吗?
解决方案
您应该注意到,它不是重定向。它由 JavaScript 代码触发。该页面包含您需要的网址,但您必须自己提取。这样的事情可能会起作用,但是您应该为正则表达式添加一些检查:
WebClient down = new WebClient();
down.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (compatible; http://example.org/)");
var result = down.DownloadString(new Uri("https://www.ccleaner.com/ccleaner/download/portable"));
var download = Regex.Match(result, "data-download-url=\"(.*?)\"").Groups[1].Value;
var uri = new Uri(download);
down.DownloadFileAsync(uri, Path.GetFileName(download));
推荐阅读
- asp.net-core - 如何在 .NET Core Web API 中实现 ReadOnly Swagger 属性?
- java - 类不是抽象的,不会覆盖抽象方法简单代码
- reactjs - react + socket.io socket.on 事件未正确更新状态
- python - 在 pandas 中使用 read_csv 时忽略双引号 (")
- python - 使用 RectBivariateSpline 进行图像平滑
- angular - Angular-10中的Syncfusion网格单元条件格式
- c# - 为什么在 .Net Core 中内置中间件之后执行内联中间件,而不管它们被调用的顺序如何?
- docker - AutoML 生成的容器立即返回 503 (GCP)。如何排除故障?
- c - 奇怪的 LD_PRELOAD 技巧 + gcc 析构函数行为
- python - 在没有周末的情况下实现 matplotlib 简洁的日期格式化程序