c# .net 4.0下载https文件

cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApp8
{
    using System;
    using System.IO;
    using System.Net;
    using System.Windows.Forms;

    public class HttpsDownloaderNet40
    {
        public bool DownloadFileWithProgress(string url, string savePath, ProgressBar progressBar, Label statusLabel)
        {
            try
            {
                // 配置 HTTPS 安全协议(.NET 4.0 支持 TLS 1.0/SSL 3.0)
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
                ServicePointManager.SecurityProtocol |= (SecurityProtocolType)0x0300 | (SecurityProtocolType)0x0C00;
                // 忽略 SSL 证书验证(仅测试环境,生产环境需移除)
                ServicePointManager.ServerCertificateValidationCallback +=
                    (sender, cert, chain, errors) => true;

                using (WebClient client = new WebClient())
                {
                    // 绑定进度更新事件(UI 线程安全)
                    client.DownloadProgressChanged += (sender, e) =>
                    {
                        if (progressBar != null && progressBar.InvokeRequired)
                        {
                            progressBar.Invoke((MethodInvoker)(() => UpdateProgress(progressBar, e.ProgressPercentage)));
                        }
                        else
                        {
                            UpdateProgress(progressBar, e.ProgressPercentage);
                        }

                        if (statusLabel != null && statusLabel.InvokeRequired)
                        {
                            statusLabel.Invoke((MethodInvoker)(() => UpdateStatus(statusLabel, e)));
                        }
                        else
                        {
                            UpdateStatus(statusLabel, e);
                        }
                    };

                    // 绑定下载完成事件
                    client.DownloadFileCompleted += (sender, e) =>
                    {
                        if (e.Error != null)
                        {
                            ShowMessageBox("下载失败:" + e.Error.Message, MessageBoxIcon.Error);
                        }
                        else
                        {
                            ShowMessageBox("文件下载完成!", MessageBoxIcon.Information);
                        }
                    };

                    // 开始异步下载(避免 UI 阻塞)
                    client.DownloadFileAsync(new Uri(url), savePath);
                }
            }
            catch (Exception ex)
            {
                return false;
            }
            return true;
        }

        // 辅助方法:更新进度条
        private void UpdateProgress(ProgressBar progressBar, int percentage)
        {
            if (progressBar != null)
            {
                progressBar.Value = percentage;
                progressBar.Update(); // 强制刷新(可选)
            }
        }

        // 辅助方法:更新状态标签
        private void UpdateStatus(Label statusLabel, DownloadProgressChangedEventArgs e)
        {
            if (statusLabel != null)
            {
                statusLabel.Text = $"下载进度:{e.ProgressPercentage}%  " +
                                 $"{e.BytesReceived}/{e.TotalBytesToReceive} 字节";
                statusLabel.Update(); // 强制刷新(可选)
            }
        }

        // 辅助方法:跨线程显示消息框
        private void ShowMessageBox(string message, MessageBoxIcon icon)
        {
            if (MessageBox.Show(message, "提示", MessageBoxButtons.OK, icon) == DialogResult.OK)
            {
                // 可选:下载失败后清理不完整文件
                // if (icon == MessageBoxIcon.Error && File.Exists(savePath)) File.Delete(savePath);
            }
        }
    }
     
}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

namespace WindowsFormsApp8

{

using System;

using System.IO;

using System.Net;

using System.Windows.Forms;

public class HttpsDownloaderNet40

{

public bool DownloadFileWithProgress(string url, string savePath, ProgressBar progressBar, Label statusLabel)

{

try

{

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;

ServicePointManager.SecurityProtocol |= (SecurityProtocolType)0x0300 | (SecurityProtocolType)0x0C00;

ServicePointManager.ServerCertificateValidationCallback +=

(sender, cert, chain, errors) => true;

using (WebClient client = new WebClient())

{

client.DownloadFile(new Uri(url), savePath);

}

}

catch (Exception ex)

{

return false;

}

return true;

}

}

}

相关推荐
Happy coder13 小时前
【avalonia教程】11字符串格式化、avalonia自带绑定值的转换
c#·avalonia
Panda__Panda20 小时前
docker项目打包演示项目(数字排序服务)
运维·javascript·python·docker·容器·c#
weixin_4569042720 小时前
基于.NET Framework 4.0的串口通信
开发语言·c#·.net
2501_9151063221 小时前
Comodo HTTPS 在工程中的部署与排查实战(证书链、兼容性与真机抓包策略)
网络协议·http·ios·小程序·https·uni-app·iphone
2501_9159090621 小时前
苹果软件混淆与 iOS 代码加固趋势,IPA 加密、应用防反编译与无源码保护的工程化演进
android·ios·小程序·https·uni-app·iphone·webview
2501_9160074721 小时前
苹果软件混淆与 iOS 应用加固实录,从被逆向到 IPA 文件防反编译与无源码混淆解决方案
android·ios·小程序·https·uni-app·iphone·webview
Tiger_shl21 小时前
C# 预处理指令 (# 指令) 详解
开发语言·c#
yuyuyui1 天前
Roslyn 技术解析:如何利用它做代码规范检查与运行时代码生成?
.net
sali-tec1 天前
C# 基于halcon的视觉工作流-章45-网格面划痕
开发语言·算法·计算机视觉·c#
云草桑1 天前
C#入坑JAVA 使用XXLJob
java·开发语言·c#