qt5c++;HTTP POST问题 我一直尝试使用C++和Qt来进行HTTP POST请求,经过大量的研究,这是我可以使程序编译的唯一方法。95%的例子有很多错误,并且想要不再存在的库。问题是,当我使用这段代码时,它的“reply”等于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(); QEventLoop事件循环; QUrl myURL(QString(“http://example.com/")); QNetworkRequest请求(myURL); QNetworkAccessManager经理; QObject::connect(&mgr,信号(完成(QNetworkReply*)),&eventLoop,插槽(退出()); QURLQU; qu.addQueryItem(“unm”,aUser); qu.addQueryItem(“pwd”,aPass); QUrl参数; 参数设置查询(qu); QNetworkReply*reply=mgr.post(请求,参数toEncoded()); qDebug()

qt5c++;HTTP POST问题 我一直尝试使用C++和Qt来进行HTTP POST请求,经过大量的研究,这是我可以使程序编译的唯一方法。95%的例子有很多错误,并且想要不再存在的库。问题是,当我使用这段代码时,它的“reply”等于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(); QEventLoop事件循环; QUrl myURL(QString(“http://example.com/")); QNetworkRequest请求(myURL); QNetworkAccessManager经理; QObject::connect(&mgr,信号(完成(QNetworkReply*)),&eventLoop,插槽(退出()); QURLQU; qu.addQueryItem(“unm”,aUser); qu.addQueryItem(“pwd”,aPass); QUrl参数; 参数设置查询(qu); QNetworkReply*reply=mgr.post(请求,参数toEncoded()); qDebug(),c++,http-post,qt5,C++,Http Post,Qt5,在读取回复之前,必须执行事件循环。Qt文档说 QNetworkAccessManager具有异步API 所以你必须等到回复完成。这就是使用QEventLoop的目的。您需要阻止调用线程,直到QNetworkAccessManager发出finished(QNetworkReply*)。 除了不执行QEventLoop,代码中的一切都很好。 发送请求后放置eventLoop.exec() QUrl myURL(QString("http://example.com")); QNetworkRequ

在读取回复之前,必须执行事件循环。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();
QUrl myURL(QString(“http://example.com"));
QNetworkRequest请求(myURL);
QNetworkAccessManager经理;
QURLQU;
qu.addQueryItem(“unm”,aUser);
qu.addQueryItem(“pwd”,aPass);
QUrl参数;
参数设置查询(qu);
QNetworkReply*reply=mgr.post(请求,参数toEncoded());
QEventLoop事件循环;
QObject::connect(&mgr,信号(完成(QNetworkReply*)),&eventLoop,插槽(退出());
eventLoop.exec();

qDebug()这确实帮了大忙,但仍然存在一些问题。使用wireshark,它似乎在执行HTTP-GET而不是HTTP-POST。你知道为什么会这样吗?