如何在 QNetWorkReply 类型的变量中读取从服务器发送的数据?

Posted

技术标签:

【中文标题】如何在 QNetWorkReply 类型的变量中读取从服务器发送的数据?【英文标题】:how can I read the data sent from the server in a variable of type 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)

//????????????

【问题讨论】:

【参考方案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="发送。

以上是关于如何在 QNetWorkReply 类型的变量中读取从服务器发送的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何制作自己的自定义 QNetworkReply?

如何增加 QNetworkReply::downloadProgress 信号频率?

使用 QNetworkReply 如何发布文件,然后从服务器接收转换后的文件?

c++中读文件时如何read函数读入其他数据类型的数据

QNetworkReply:在 QWebView 中禁用了网络访问

QNetworkReply - 建立连接,写入第一个字节等