Qt 5 C++ HTTP POST issues

Qt 5 C++ HTTP POST issues

本文关键字:POST issues HTTP C++ Qt      更新时间:2023-10-16

我一直在尝试使用c++和Qt的HTTP POST请求,经过非常多的研究,这是唯一的方法,我可以得到程序甚至编译。95%的示例有大量错误,并且需要不再存在的库。问题是,当我使用这段代码,它的"回复"等于null…是否有更好的方法来做一个HTTP POST请求,我做错了什么?

QEventLoop eventLoop;
QUrl myURL(QString("http://example.com/"));
QNetworkRequest request(myURL);
QNetworkAccessManager mgr;
QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
QUrlQuery qu;
qu.addQueryItem("unm", aUser);
qu.addQueryItem("pwd", aPass);
QUrl params;
params.setQuery(qu);
QNetworkReply *reply = mgr.post(request, params.toEncoded());
qDebug() << "Success" <<reply->readAll();

必须在读取回复之前执行事件循环。Qt文档说

QNetworkAccessManager有一个异步API

所以你必须等到回复完成。这就是使用QEventLoop的目的。需要阻塞调用线程,直到QNetworkAccessManager释放finished(QNetworkReply*)。代码中的一切都很好,除了不执行QEventLoop。在发送请求后放置eventLoop.exec()

QUrl myURL(QString("http://example.com"));
QNetworkRequest request(myURL);
QNetworkAccessManager mgr;
QUrlQuery qu;
qu.addQueryItem("unm", aUser);
qu.addQueryItem("pwd", aPass);
QUrl params;
params.setQuery(qu);
QNetworkReply *reply = mgr.post(request, params.toEncoded());

QEventLoop eventLoop;
QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
eventLoop.exec();
qDebug() << "Success" <<reply->readAll();