【问题标题】:how can I read the data sent from the server in a variable of type QNetWorkReply?如何在 QNetWorkReply 类型的变量中读取从服务器发送的数据?
【发布时间】:2011-08-24 14:45:28
【问题描述】:

我已使用此代码使用 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)
{
//????????????
}

【问题讨论】:

    标签: qt qnetworkaccessmanager


    【解决方案1】:

    QNetworkReplyQIODevice,因此您可以像读取文件一样读取它。但是您必须销毁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 变量声明为您的类的成员,而不是为每个请求创建一个新变量。

    【讨论】:

    • 调试时...我发现“数据”是空的
    • 你能发布你想与之通信的PHP脚本的代码吗?毕竟可能需要处理重定向。
    • 这里是----> echo $_POST[name];
    • 那么你代码中的第一个参数应该使用QString s = "name="+name+"&";而不是"param1="发送。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2017-03-08
    • 2019-05-10
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    相关资源
    最近更新 更多