关于c#:使用” ftps”前缀连接到FTP服务器

Connecting to FTP server with a “ftps” prefix

此刻我已经用尽了所有资源,所以我来寻求帮助。

我有一个客户端,该客户端为我提供了其ftp站点的用户名和密码。但是,要在Web上访问它,请使用https://ftps.sitename.com

要访问FileZilla,我可以使用ftps://或sftp://

我的问题是我不知道要在程序中访问它需要做什么。

现在我有以下代码:

1
2
3
4
5
6
7
8
var ftpFilePath = @"ftp://ftps.sitename.com/file.txt";
var request = (FtpWebRequest)WebRequest.Create(ftpFilePath);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredentials(username, pass);
// enable SSL?

var response = (FtpWebResponse)request.GetResponse();
// Other code

它目前在GetResponse上失败,并显示无法连接到远程服务器的错误。如果我使用" ftps://ftps.sitename.com",则会收到有关前缀的错误提示。

这是我第一次处理此类问题,我一定错过了一些小事情。非常感谢您的帮助。

编辑:

我最终使用了WinSCP软件包,并遵循了本教程:https://winscp.net/eng/docs/library_session_getfiles

我遇到的两个问题是我没有ssh密钥,因此我正在临时设置

1
GiveUpSecurityAndAcceptAnySshHostKey = true

然后我遇到一个小问题,要确保运行VS的进程可以访问我试图将文件写入的路径。


FTPS有两种类型:隐式和显式。它们不兼容。

默认情况下,隐式FTPS使用端口990,并且仅假设所有内容都是SSL / TLS,而显式FTPS以普通FTP连接到端口21,然后在发送AUTH命令时切换到SSL / TLS。 >

FileZilla对于隐式FTPS使用前缀\\'ftps \\',对于显式FTPS使用\\'ftpes \\',因此,如果它在FileZilla中使用ftps://起作用,则表明服务器支持隐式FTPS。 .NET可能会将ftps://解释为显式FTP,因为它是FTPS的"现代"格式(隐式FTPS是旧式的)。

所以这可能是您的问题。您可能正在尝试使用客户端代码(在.NET中)连接到端口990上的旧式(隐式)FTPS服务器,该客户端代码假定端口21上为\\'现代\\'FTPS。

对此可能没有简单的解决方案,因为我认为WebRequest不支持隐式FTPS或SFTP。除非您可以让服务器管理员添加对显式FTPS的支持,否则您可能必须使用专用的FTPS客户端,例如我是开发人员之一的edtFTPnet / PRO的客户端,它支持隐式FTPS。

希望对您有所帮助。


在您的项目上,将目标框架设置为4.5.2或更高版本

设置安全协议以使用tls1.2:

1
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;