как я могу прочитать данные, отправленные с сервера в переменной типа QNetWorkReply?

Я использовал этот код для отправки имени пользователя и пароля на сервер с использованием метода POST. Это возвращает мне ответ. Итак, как я могу получить доступ к переменной ответа таким образом, чтобы я мог прочитать данные, отправленные с сервера мне обратно?

Используемый код:

void MainWindow::post(QString name, QString password)
{
    QUrl serviceUrl = QUrl("http://lascivio.co/mobile/post.php");
    QByteArray postData;
    QString s = "param1="+name+"&";
    postData.append(s);
    s = "param2=" +password;
    postData.append(s);
    QNetworkAccessManager *networkManager = new QNetworkAccessManager(this);
    connect(networkManager, SIGNAL(finished(QNetworkReply*)), this,     SLOT(serviceRequestFinished(QNetworkReply*)));
    QNetworkRequest request;
    request.setUrl(serviceUrl);
    QNetworkReply* reply = networkManager->post(request, postData);
}
void MainWindow::serviceRequestFinished(QNetworkReply* reply)
{
//????????????
}

person Sonnenschein    schedule 24.08.2011    source источник


Ответы (1)


QNetworkReply — это QIODevice, поэтому вы можете прочитать его так же, как и файл. Но вы должны уничтожить QNetworkReply и проверить наличие ошибок в этом слоте.

Например, в простейшем случае (без перенаправления HTTP):

void MainWindow::serviceRequestFinished(QNetworkReply* reply)
{
    // At the end of that slot, we won't need it anymore
    reply->deleteLater();

    if(reply->error() == QNetworkReply::NoError) {
        QByteArray data = reply->readAll();
        // do something with data
        ...
    } else {
        // Handle the error
        ...
    }
}

Вероятно, вам следует объявить переменную QNetworkAccessManager членом вашего класса, а не создавать новую для каждого запроса.

person alexisdm    schedule 24.08.2011
comment
во время отладки... я обнаружил, что данные пусты - person Sonnenschein; 25.08.2011
comment
Не могли бы вы опубликовать код скрипта PHP, с которым вы хотите общаться? Там может быть перенаправление, чтобы справиться в конце концов. - person alexisdm; 25.08.2011
comment
Вот оно ----› echo $_POST[имя]; - person Sonnenschein; 25.08.2011
comment
Затем первый параметр в вашем коде должен быть отправлен с использованием QString s = "name="+name+"&";, а не "param1=". - person alexisdm; 25.08.2011