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;

}

}

}

相关推荐
2501_915909065 小时前
抓包工具断点拦截是什么?如何半路拦截修改 HTTP 请求
网络协议·计算机网络·网络安全·adb·https·udp
淡海水5 小时前
05-02-源码-Boehm GC标记阶段
算法·unity·c#·游戏引擎·gc
信可维6 小时前
AI 读 Word 表格总读错?先查合并单元格和表头这 3 处
开发语言·人工智能·c#·word·软件工程
幸福清风6 小时前
从域名到一行 nginx 配置:一次站点 HTTPS 证书更换与排障复盘
python·nginx·https
半摆烂日常8 小时前
手机表单的左滑操作:触摸事件的处理细节
大数据·开发语言·人工智能·智能手机·https·c#
绛橘色的日落(。・∀・)ノ8 小时前
C#学习笔记
笔记·学习·c#
asdzx678 小时前
C# 将 HTML 转换为 PDF:基于 Chrome 的转换方案
pdf·c#·html
1-1=09 小时前
.NET 实现后台任务
c#·.net·.netcore·quartz·hangfire
步步为营DotNet10 小时前
从分代预算到 DATAS:.NET GC 调优到底在调什么
c#·.net·内存管理·gc·datas
淡海水10 小时前
05-03-源码-Boehm GC分配与碎片管理
开发语言·算法·unity·c#·游戏引擎·gc