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;

}

}

}

相关推荐
lily的出海笔记1 小时前
HTTP/HTTPS与SOCKS5三大代理IP协议,如何选择最佳协议?
tcp/ip·http·https
明月看潮生1 小时前
青少年编程与数学 02-020 C#程序设计基础 14课题、程序调试
开发语言·青少年编程·c#·编程与数学
Kookoos7 小时前
健康检查:在 .NET 微服务模板中优雅配置 Health Checks
微服务·架构·.net·abp vnext
爱吃番茄炒蛋*7 小时前
工业自动化实战:基于 VisionPro 与 C# 的机器视觉 PLC 集成方案
数码相机·计算机视觉·c#·自动化·vision pro
追逐时光者10 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 40 期(2025年5.26-5.31)
后端·.net
一名用户10 小时前
unity随机生成未知符号教程
c#·unity3d·游戏开发
全岛铁盒202311 小时前
生成https 证书步骤
网络协议·http·https
赛卡11 小时前
基于 AUTOSAR 的域控产品软件开发:从 CP 到 AP 的跨越
嵌入式硬件·车载系统·c#·自动驾驶·硬件工程·智能硬件
C137的本贾尼12 小时前
HTTPS
网络协议·http·https
00后程序员张13 小时前
面对 UI 差异化的调试难题:本地多设备测试中的 WebDebugX 应用实录
websocket·网络协议·tcp/ip·http·网络安全·https·udp