c++ - Qt 5 C++ HTTP POST 问题

标签 c++ http-post qt5

我一直在尝试使用 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 has an asynchronous 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();

关于c++ - Qt 5 C++ HTTP POST 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32001166/

相关文章:

c++ - Qt QProcess有时能用有时不能用

android - 当我使用 HttpPost 向 Django 发送数据时出现 403 FORBIDDEN 消息

c++ - 如何在 QComboBox 中显示短值并在其下拉列表中显示长值?

c++ - 用于显示带有小图片(图标/表情符号)的文本的 QWidget

c++ - Windows:获取窗口标题栏的高度

c++ - 在范围内振荡一个值

c++ - 父进程和子进程中的全局变量

Java servlet 无法接收 http post 多部分请求的各个部分

android - Android 上的 HttpPost 崩溃应用程序

qt - 是否可以设置 QTableView 角按钮的文本?