2011-04-15 89 views
1

帮我使用协议FTP编写程序,使用QnetworkAccessManager通过登录密码进行身份验证。 我实现连接到服务器,并获得目录列表,但我不不知道如何实现身份验证。我阅读文章http://doc.qt.nokia.com/qq/32/qq32-webkit-protocols.htmlQNetworkAccessManager和authenticationRequired

我的源代码attach https://rapidshare.com/files/457472584/zip.zip

的Qt 4.7 的Windows XP Linux的

+0

为什么不你使用QFtp类吗? – RedX 2011-04-15 15:08:11

+0

我使用Qftp(请参阅FtpReply类)。但我想用QNetworkAccessManager来做到这一点。这是我体验的过程;)。不可能?可以使用一些解决方法? – user709500 2011-04-15 15:14:55

回答

5

我在做类似的事情和需要解决的非常相同的问题:
我要做的就是:
- 创建QNetworkAccessManager对象,并连接信号authenticationRequired

m_ftpManagerPtr = new QNetworkAccessManager(this); 
Q_ASSERT(m_ftpManagerPtr); 
connect (m_ftpManagerPtr, 
      SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), 
      this,   
      SLOT(onAuthenticationRequestSlot(QNetworkReply*,QAuthenticator*))); 

内的插槽功能,我只是填充我们呃名和密码字段/变量:

void QacFtpClient::onAuthenticationRequestSlot(QNetworkReply *aReply, 
               QAuthenticator *aAuthenticator) 
{ 
    qDebug() << Q_FUNC_INFO; 
    aAuthenticator->setUser(m_ftpUser); 
    aAuthenticator->setPassword(m_ftpPasswd); 
} 

,这就是它...它自动地工作;)

+0

谢谢这是非常有用的! – 2014-05-30 09:00:21

6

QUrl有,你可以使用一个用户名/密码字段:

QNetworkAccessManager* manager = new QNetworkAccessManager(this); 
QUrl url("host"); 
url.setUserName("user"); 
url.setPassword("password"); 

manager->get(QNetworkRequest(url)); 
+0

我认为这会比QAuthenticator方法更好,并避免不必要的第一次往返行程只是被告知授权,但看看源代码似乎仍然等待请求失败,然后再添加授权:( – boycy 2015-08-19 10:57:24

相关问题