2010-12-21 227 views
5

我试图让FTP-SSL与Qt 4.6.3一起工作。我已经编译了支持OpenSSL的Qt。有关Qt的FTPS有什么好的资源?看来QFtp不提供SSL支持。我真的不想创建我自己的FTPS实现。Qt 4.6中的FTPS(FTP-SSL)

//编辑: 我发现QNetworkAccessManager(ty @ frank),但无法找到任何有用的文档或SSL示例。这就是我想要的:

QUrl url = QUrl("ftp://localhost/filex.txt"); 
url.setUserName("root"); 
url.setPassword("root"); 
QNetworkRequest request(url); 
QSslConfiguration SslConfiguration(QSslConfiguration::defaultConfiguration()); 
request.setSslConfiguration(SslConfiguration); 
manager->get(request); 

但FileZilla不会让我连接。在FZ控制台说:

(000035)21.12.2010十七点31分46秒 - (未登录)(127.0.0.1)>用户root

(000035)21.12.2010 17:31: 46 - (未登录)(127.0.0.1)> 530 SSL需要

FileZilla中配置:

  • FTP通过SSL/TLS支持启用
  • 显式FTP通过TLS启用
  • 平原未加密的FTP不允许
  • SSL被迫为根登录

我至少想到某种sslErrors信号,因为用户/密码是罚款和SSL失败了,但我只得到authenticationRequired信号。

感谢您的帮助!

+0

您是否检查过QNetworkAccessManager? – 2010-12-21 13:23:19

+0

@frank非常感谢您的坦白,请参阅我更新的问题 – atamanroman 2010-12-21 16:43:29

+0

FileZilla中的SSL/TLS配置是什么? – 2010-12-21 23:29:20

回答

4

不幸的是,Qt中没有开箱即用的FTPS解决方案。

  • QFtp实现许多ftp命令 但不支持加密。
  • QNetworkAccessManager仅支持 基本的ftp功能(文件 下载/上传),并且在ftp的情况下不支持 加密。值得一提的是它支持HTTP的 加密,它是主要为其设计的 协议。
  • QSslSocket实现SSL,但没有 特定的协议如FTP或HTTP

考虑上述信息纳入考虑的想法来介意与QSslSocket混合QFtp得到加密的FTP。问题是QFtp类没有方法可以使QFtp使用用户提供的套接字。比较QHttp有这样一种方法 - int QHttp::setSocket(QTcpSocket * socket)

底线;根据Thiago Macieira(QNetworkAccessManager的设计者),要走的路是使用QSslSocket来实现FTP协议。

+0

你最好告诉thiago为Qt 4.8实现这个;) – ismail 2010-12-26 21:42:33

+0

非常感谢!你的回答绝对证实了我到目前为止发现的结果。我不太喜欢重新实现FTP的想法,因此我们将制作QFtp或QNetworkAccessManager SSL-Ready或购买chilkats FTP2库。有人应该提到Qt手册中的FTPS问题 - QNetworkAccessManagers FTP和SSL支持意味着FTPS支持。 – atamanroman 2010-12-26 21:59:31