Qt 5 C ++ HTTP POST问题

时间:2015-08-14 01:56:12

标签: 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();

1 个答案:

答案 0 :(得分:2)

您必须在阅读回复之前执行事件循环。 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();