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: