C#从基于FTPS的FTP server下载数据 (FtpWebRequest 的使用)SSL 加密

本文主要是介绍C#从基于FTPS的FTP server下载数据 (FtpWebRequest 的使用)SSL 加密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

FTPS,亦或是FTPES, 是FTP协议的一种扩展,用于对TLS和SSL协议的支持。

本文讲述了如何从一个基于FTPS的Server中下载数据的实例。

 

任何地方,如有纰漏,欢迎诸位道友指教。

 

话不多,上码。

 using System;using System.Net;using System.IO;using System.Net.Security;using System.Security.Cryptography.X509Certificates;namespace FtpWebrequestBlogCase{class Program{static void Main(string[] args){DownLoadFile("ftp://xxx/xxx.zip");Console.ReadKey();}public static void DownLoadFile(string addr){var req = (FtpWebRequest)WebRequest.Create(addr);req.Method = WebRequestMethods.Ftp.DownloadFile;req.UseBinary = true;req.UsePassive = true;const string userName = "xxxx";const string password = "xxxx";req.Credentials = new NetworkCredential(userName, password);//如果要连接的 FTP 服务器要求凭据并支持安全套接字层 (SSL),则应将 EnableSsl 设置为 true。//如果不写会报出421错误(服务不可用)req.EnableSsl = true;// 首次连接FTP server时,会有一个证书分配过程。//如果没有下面的代码会报异常://System.Security.Authentication.AuthenticationException: 根据验证过程,远程证书无效。ServicePointManager.ServerCertificateValidationCallback =new RemoteCertificateValidationCallback(ValidateServerCertificate);try{using (var res = (FtpWebResponse)req.GetResponse()){const string localfile = "test.zip";var fs = new FileStream(localfile, FileMode.Create, FileAccess.Write);const int buffer = 1024*1000;var b = new byte[buffer];var i = 0;var stream = res.GetResponseStream();while (stream != null && (i = stream.Read(b, 0, buffer)) > 0){fs.Write(b, 0, i);fs.Flush();}}Console.WriteLine("done!");}catch (Exception ex){var message = ex.ToString();Console.WriteLine(message);}finally{}}public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors){return true;}}}

其实之比正常的FTP下载文件函数多了两句代码:

1  req.EnableSsl = true;  基于FTPS的 FTP 服务器会要求凭据并支持安全套接字层 (SSL),所以需要设置为True.

 

2  ServicePointManager.ServerCertificateValidationCallback = 

                new RemoteCertificateValidationCallback(ValidateServerCertificate);

 

        public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
                return true;
        }

证书验证过程。

 

下篇文章将探讨如何封装FTPWebRequest类,使其更加健壮易用。

这篇关于C#从基于FTPS的FTP server下载数据 (FtpWebRequest 的使用)SSL 加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/818109

相关文章

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚