1

owncloud サーバー上のインスタンスに接続するように言及されているアプリケーションを作成していますが、サーバーに接続しない理由がわかりません。代わりに、応答がログイン画面に表示され、html コードが表示されます。それのための

これは接続を担当するコードです

//the network request and reply
          QNetworkAccessManager * manager = new QNetworkAccessManager();
          QUrl url (url1);
          manager->get(QNetworkRequest(url));
          connect(manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
                      SLOT(provideAuthenication(QNetworkReply*,QAuthenticator*)));
          connect(manager, SIGNAL(finished(QNetworkReply *)),
                  this, SLOT(result(QNetworkReply *)));

応答コード

void Login::result(QNetworkReply *reply)
{
    reply->deleteLater();

     if(reply->error() == QNetworkReply::NoError) {
         // Get the http status code
         int v = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
         if (v >= 200 && v < 300) // Success
         {
             qDebug()<<"Here we got the final reply";
             QString replyText = reply->readAll();
             qDebug()<<replyText;
         }
         else if (v >= 300 && v < 400) // Redirection
         {
             qDebug()<<"Get the redirection url";
             QUrl newUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
             // Because the redirection url can be relative,
             // we have to use the previous one to resolve it
             newUrl = reply->url().resolved(newUrl);

             QNetworkAccessManager *manager = reply->manager();
             QNetworkRequest redirection(newUrl);
             QNetworkReply *newReply = manager->get(redirection);
             QString replyText = newReply->readAll();
             qDebug()<<replyText;
             return; // to keep the manager for the next request
         }
     }
     else
     {
         // Error
         qDebug()<<reply->errorString();
     }

     reply->manager()->deleteLater();
 }

認証ではなくログイン画面が表示される理由を理解するのを手伝ってもらえますか?

4

1 に答える 1

0

connect()そうしないと、認証が必要なシグナルがトリガーされたときに呼び出す前に呼び出しを試みてくださいmanager->get()。そのシグナルを処理するために呼び出すスロットが存在しない可能性があります。

代わりにこれを試してください:

QNetworkAccessManager * manager = new QNetworkAccessManager();
QUrl url (url1);
connect(manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
    SLOT(provideAuthenication(QNetworkReply*,QAuthenticator*)));
connect(manager, SIGNAL(finished(QNetworkReply *)),
    this, SLOT(result(QNetworkReply *)));
manager->get(QNetworkRequest(url));
于 2014-03-19T15:54:59.853 に答える