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

2023-05-16

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类,使其更加健壮易用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何使用 shell 脚本 ftp 多个文件

    我正在尝试使用 shell 脚本将多个文件从一台计算机传输到另一台计算机 下面是我的脚本 ftp nv lt
  • BasicNetwork.performRequest:意外响应代码 500

    我的 Android Studio 中有这个登录 Java 代码 private void loginUser pd ProgressDialog show LoginActivity this Loading StringRequest
  • nginx - 记录 SSL 握手失败

    我正在运行启用了 SSL 的 nginx 服务器 我的协议 密码设置相当安全 我已经在 ssllabs com 上检查过它们 但是 因为这是一个由我无法控制的 http 客户端调用的 Web 服务 所以我担心兼容性 重点是 有没有办法在我的
  • Filezilla - 需要将项目从服务器复制到桌面[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这可能非常简单明了 但我对 Filezilla 不太熟悉 不能犯错误 我需要将文件从服务器复制到桌面 而不实际将其从服务器中删除 实时站点
  • Web 客户端异常:底层连接已关闭:无法建立 SSL/TLS 安全通道的信任关系

    我有一个简单的应用程序 它使用 C Web 客户端类来下载网站 HTML 这是我正在使用的代码的精简示例 WebClient wc new WebClient wc Headers Add user agent Mozilla 4 0 co
  • 使用 PowerShell 在 IIS FTP 站点上设置权限和设置

    我是 PowerShell 的初学者 我尝试了这个脚本并且运行良好 但我需要将 FTP 授权规则更改为 所有用户 读 写 并将 FTP 用户隔离 更改为 用户名目录 NEEDED FOR IIS CMDLETS Import Module
  • 在云服务器中运行 python 脚本的最简单方法是什么?

    我有一个网络爬行 python 脚本 需要几个小时才能完成 并且无法在我的本地计算机上完整运行 有没有一种方便的方法可以将其部署到简单的 Web 服务器 该脚本基本上将网页下载到文本文件中 如何最好地实现这一点 谢谢 既然你说性能是一个问题
  • Groovy 与 Grape 和 AntBuilder 类加载器问题

    我想使用 groovy 编写一个小 ftp 脚本 并找到了这篇文章http www hhhhq org blog 2009 05 01 ftp using groovy and ant http www hhhhq org blog 200
  • 如何使用代理将 boost::asio 连接到 HTTPS 服务器?

    在我们的应用程序中 我们使用 boost asio 来使用 HTTP 和 HTTPS 进行连接 我们还可以使用 HTTP 代理 现在我需要使用代理添加对 HTTPS 服务器的支持 我研究了相当多的样本 发现所需的步骤似乎是 创建到代理的 H
  • Java FTPS 无法检索文件列表(FileZilla 客户端工作正常)

    我正在使用 Apache Commons Net v3 5 和 Java 8 连接到远程 FTPS 站点 即在互联网上 我可以轻松连接 Windows 10 计算机上的 FileZilla 客户端 但我的 Java 程序无法完成相同的步骤
  • 在node.js中使用socket.io设置服务器-服务器SSL通信

    我正在尝试使用 socket io 通过 ssl 连接来设置服务器到服务器的链接 这是我的例子 Server var app require express var config require config var https requi
  • Spring Boot 是否支持服务器名称指示(SNI)?

    Spring Boot 是否支持服务器名称指示 SNI 具体来说 运行嵌入式 Tomcat 服务器并打包为可执行 jar 文件的 Spring Boot 2 2 2 RELEASE 应用程序是否可以根据传入请求的主机名支持多个 SSL 证书
  • WebView ssl 错误

    对不起我的英语不好 我需要加载 url https 我有一些问题 当我尝试加载页面时 webView 给我错误 primary error 3 certificate Issued to CN my site com Issued by C
  • 向 Python 2.6 添加 SSL 支持

    我尝试使用sslPython 2 6 中的模块 但我被告知它不可用 安装OpenSSL后 我重新编译2 6 但问题仍然存在 有什么建议么 您安装了 OpenSSL 开发库吗 我必须安装openssl devel例如 在 CentOS 上 在
  • 在 C++ 和 Windows 中使用 XmlRpc

    我需要在 Windows 平台上使用 C 中的 XmlRpc 尽管我的朋友向我保证 XmlRpc 是一种 广泛可用的标准技术 但可用的库并不多 事实上 我只找到一个库可以在 Windows 上执行此操作 另外一个库声称 您必须做很多工作才能
  • 使用 Python 了解何时已从 FTP 源完全接收文件

    我正在使用 Python 开发一个执行以下操作的应用程序 监视特定目录并监视文件 转移到它 文件完成传输后 运行一些 文件上的外部程序 我开发这个应用程序的主要问题是知道文件何时完成传输 据我所知 该文件将通过 SFTP 传输到特定目录 P
  • 自动 IIS6 403.4 重定向到 SSL 不起作用

    我的 ASP Net 网站中有一个目录需要启用 SSL 对于所有其他目录 我不希望启用 SSL 使用 IIS 我为我想要需要 SSL 的文件夹选中了 需要安全通道 SS 和 128 位加密复选框 现在 当用户在我的安全目录中输入 http
  • 使用 SSL 的 Xamarin.Forms Image.Source

    我正在使用一个在线商店来存储通过我们的应用程序上传的用户图像 并受 SSL 保护 上传工作一切顺利 因为我使用的是带有附加证书的 WebClient 但是当我尝试使用 Xamarin Forms Image 组件时 例如将源设置为 http
  • 如何在docker的keycloak中添加SSL

    我在将 SSL 证书添加到在 docker 上运行的 Keycloak 时遇到问题 我通过负载均衡器从 AWS EC2 获得了 SSL 证书 但不知道如何将其添加到 docker 上的 Keycloak 中 我正在通过谷歌搜索 但尚未找到任
  • 无法使用 PHP ftp_connect() 连接 FTP 服务器

    我试图使用 PHP 的 ftp connect 函数连接 ftp 服务器 如下所示 但它返回这个错误 警告 ftp connect function ftp connect php network getaddresses getaddri

随机推荐

  • 访问和操作H2数据库

    访问和操作H2数据库 O2OA平台内嵌了H2数据库 xff0c 管理员可以通过支持JDBC的客户端对H2数据库进行访问和数据操作 O2OA默认内嵌了H2数据库 xff0c H2数据库支持两种访问方式 xff1a 一 以WEB方式访问数据库
  • O2OA人员身份,人员属性

    人员信息创建 从组织管理应用中进入个人管理界面后 xff0c 点击左侧上方的添加按钮 xff0c 如下图所示 xff1a 在右侧显示的界面中填写人员信息 xff1a 人员名称 手机号码 唯一编码 xff08 以上必填 xff0c 其他选填写
  • O2OA的SSO与单点认证

    SSO与单点认证 与其他系统实现单点登入 1 1 URL传递加密参数方式 这种方式是比较通用简单的实现方式 xff0c 应急门户将用户登录信息 xff08 用户ID xff09 以URL参数方式传递给被集成系统 xff0c 被集成系统通过接
  • newman和Jenkins(postname和Jenkins的结合使用)

    Newman介绍 Newman 是 Postman 推出的一个 nodejs 库 xff0c 直接来说就是 Postman 的json文件可以在命令行执行的插件 Newman 可以方便地运行和测试集合 xff0c 并用之构造接口自动化测试和
  • SmartBI入门(一)介绍和安装

    一 SmartBI系统介绍 商业智能 xff08 Business Intelligence xff0c 简称 xff1a BI xff09 xff0c 又称商业智慧或商务智能 xff0c 指用现代数据仓库技术 线上分析处理技术 数据挖掘和
  • SmartBI入门(二)配置SmartBI

    具体可以参考文档 Smartbi Config页面介绍 Smartbi V10帮助中心 SmartBI配置 如果是首次访问 xff0c 需要设置 管理员账号 密码 xff0c 以便下次登录配置界面时验证 xff0c 设置后用用户名密码登录即
  • 求助 关于A-Frame带有动画模型的导入

    哪位大神知道导入带有动画的模型后 如何调用模型自带的动画 gltf格式的
  • SmartBI入门(三)数据源配置

    1 设置数据连接 配置连接 2 选择数据表 创建的数据源 xff0c 点击数据库管理 xff0c 添加实际报表需要的数据表 3 数据库展现
  • 再见2014,你好2015

    过去就是过去了 2014年再见 xff0c 2015年你好 xff01 回首 总结也只是慰藉 1999年12月至今 xff0c 经历了整整十五个曾经 xff0c 这其中的波折 xff0c 怎是我这样的小辈能够理解的 借这个平台也只是为了感谢
  • idea报错 Artifact web:war exploded: Error during artifact deployment. See server log for details.

    因为tomcat把报错信息重定向到日志文件中了 xff0c 所以在控制台找不到报错信息 所以需要看一下tomcat日志文件报错信息 xff0c 一般情况下都有报错 日志的路径默认是在C Users 你的用户名 AppData Local J
  • Unity离线用户手册打开缓慢、卡顿

    Unity中文离线用户手册下载页面 https docs unity3d com cn 2019 4 Manual OfflineDocumentation html 文档包下载地址 xff08 需要FQ xff09 https stora
  • Python MapReduce 案例

    map t py import sys import re p 61 re compile r 39 w 43 39 for line in sys stdin ss 61 line strip split 39 39 for s in s
  • ARM基础学习-快速上下文切换技术

    FCSE的原理 快速上下文切换技术 xff08 FCSE xff09 通过修改系统中不同进程的虚拟地址 xff0c 避免在进行进程间切换时造成虚拟地址到物理地址的重映射 xff0c 从而提高系统性能 xff1b 通常情况下 xff0c 如果
  • linux下使用VNC

    安装 xff1a root 64 localhost vncserver You will require a password to access your desktops Password Verify New 39 localhos
  • svn忽略ignore文件记住方式(转)

    每个项目中的配置文件都有区别 xff0c 在本地开发和线上生产 xff0c 之前一直很懒 xff0c 不想去忽略提交一些配置文件 xff0c 只是在提交的时候排除掉 但是在项目上传部署的时候又必须小心 xff0c 害怕覆盖线上的配置 xff
  • OpenvSwitch完全使用手册

    本文主要参考 Overview of functionality and components 以及 Frequently Asked Questions 以及结合自己的理解 http sdnhub cn index php openv s
  • c++正则表达式regex_match和regex_seach使用

    1 xff1a 区别 regex match用来做全匹配 xff0c 检测字符串是否符合表达式规则 xff0c 如果字符串符合规则 xff0c 返回true xff1b regex seach用来匹配字符串中是否有和规则相匹配的字符串子串
  • ubuntu 14.04 ssh连接失败解决---离线安装openssh_server

    1 在联网机器上下载 deb 包 xff0c 因为我的离线机器为 Ubuntu14 04 64位 所以对应下载 amd64 Trusty 包 xff0c 以下为需要下载的 openssh server 及安装依赖的 deb 包名称 open
  • 使用 js 做一个简单学生系统

    HTML lt DOCTYPE html gt lt html gt lt head gt lt title gt 学生系统 lt title gt lt style type 61 34 text css 34 gt nianji wid
  • C#从基于FTPS的FTP server下载数据 (FtpWebRequest 的使用)SSL 加密

    FTPS xff0c 亦或是FTPES 是FTP协议的一种扩展 xff0c 用于对TLS和SSL协议的支持 本文讲述了如何从一个基于FTPS的Server中下载数据的实例 任何地方 xff0c 如有纰漏 xff0c 欢迎诸位道友指教 话不多