7

我正在寻找对网页进行非常简单的 POST 请求。该页面在 php 中,并将根据数据库检查发布的任何内容,然后如果该项目在数据库中,则以密钥响应。

我不知道如何在 Qt 中使用发布请求,或者如何获取返回的信息并将其存储回 Qt 中的变量中。任何帮助都将受到高度赞赏,因为我从 Qt 方面的空白开始。

我看过其他例子:

https://stackoverflow.com/questions/11348359/qt-https-post-request

如何使用 QNetworkAccessManager 将数据发布到 url

但我看不到如何存储来自 php 脚本的响应

4

3 回答 3

12

opc0de 以前的答案对我来说不是 POST,而是 GET。

这是如何执行 POST 请求

void xxx::postRequest(QByteArray & postData)
{
    QUrl url = QUrl("abc.com");


    QNetworkAccessManager * mgr = new QNetworkAccessManager(this);

    connect(mgr,SIGNAL(finished(QNetworkReply*)),this,SLOT(onFinish(QNetworkReply*)));
    connect(mgr,SIGNAL(finished(QNetworkReply*)),mgr,SLOT(deleteLater()));

    QHttpMultiPart http;

    QHttpPart receiptPart;
    receiptPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"data\""));
    receiptPart.setBody(postData);

    http.append(receiptPart);

    mgr->post(QNetworkRequest(url), http);
}

void xxx::onFinish(QNetworkReply *rep)
{

}

从这里的文档

于 2018-11-30T11:22:20.133 回答
6
QNetworkAccessManager * manager = new QNetworkAccessManager(this);

QUrl url("https://accounts.google.com/o/oauth2/token");
QNetworkRequest request(url);

request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");

QUrlQuery params;
params.addQueryItem("client_id", "...");
params.addQueryItem("client_secret", "...");
params.addQueryItem("code", "...");
// etc

connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *)));

manager->post(request, params.query().toUtf8());

来源

于 2019-03-30T20:18:38.720 回答
-2

QNetworkAccessManager信号完成连接到您的插槽并使用QNetworkReply您应该阅读网页的所有内容。

这是一个 get 示例,它可以很容易地适应 post 方法。

void MainWindow::on_pushButton_clicked()
{
    QNetworkAccessManager * mgr = new QNetworkAccessManager(this);
    connect(mgr,SIGNAL(finished(QNetworkReply*)),this,SLOT(onfinish(QNetworkReply*)));
    connect(mgr,SIGNAL(finished(QNetworkReply*)),mgr,SLOT(deleteLater()));

    mgr->get(QNetworkRequest(QUrl("http://www.google.com")));

}

void MainWindow::onfinish(QNetworkReply *rep)
{
    QByteArray bts = rep->readAll();
    QString str(bts);
    QMessageBox::information(this,"sal",str,"ok");

}
于 2012-11-09T08:08:23.037 回答