2011-04-15 73 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