如何在QT中同步发送http请求
How to send http request synchronously in QT?
以下代码使用QT
的Network API发送HTTP请求并获得响应:
void AnotherHttpClient::finished(QNetworkReply *qNetworkReply)
{
qDebug() << qNetworkReply->readAll();
}
void AnotherHttpClient::get(QString url)
{
QNetworkAccessManager *man = new QNetworkAccessManager(this);
connect(man, &QNetworkAccessManager::finished, this, finished);
const QUrl qurl = QUrl(url);
QNetworkRequest request(qurl);
man->get(request);
}
我需要使此代码同步,并且我需要get方法来返回qNetworkReply。我该怎么做?BTW是否有其他同步方式在QT中发送Http请求?
您可以执行以下操作:
QNetworkAccessManager l_nm;
QUrl l_url ("http://foo.bar");
QNetworkRequest l_req(l_url);
QNetworkReply *l_reply = l_nm.get(l_req);
QEventLoop l_event_loop;
QObject::connect(l_reply, SIGNAL(finished()), &l_event_loop, SLOT(quit()));
l_event_loop.exec();
但是在Qt应用程序中使用事件循环是有史以来最糟糕的想法。
这是另一个"丑陋的";这样做的方式……但可能没有运行自定义事件循环那么丑陋,您实际上可以添加一些";助手";内部while循环并处理错误。
QNetworkRequest request(workingPath);
auto reply = m_WebCtrl.get(request);
uint count = 0;
bool waiting = reply->isFinished();
while (!waiting) {
qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
count++;
waiting = reply->isFinished();
QThread::msleep(1);
if (count > 1000 * 10) {/// wait 10 seconds
waiting = true;
}
}
相关文章:
- 如何在boost beast http请求中设置http头
- 在多个核心中处理一个HTTP请求
- 使用 Winsock2.h C++向不和谐 API 发送 HTTP 请求时出现问题
- 使用 winsock 接收 http 请求
- 对于 http 请求,python 比 c++ 快吗?
- 在 C++/C 中使用 CURL 发出带有数据文件的 GET HTTP 请求
- 带有C++的 HTTP 请求
- 如何在QT中同步发送http请求
- 我可以使用 Boost.Asio 和 Boost.Beast 库发出 HTTPS 请求或 HTTP/2 请求吗?
- HTTP 请求中的标头名称无效
- 套接字或 HTTP 请求
- Winsock2.h 无法发送 http 请求
- 用libcurl生成http请求作为字符串
- http请求之前和之后的垃圾
- 从主机向在VirtualBox linux机器上运行的服务器发送http请求
- 如何在不阻塞 UI 线程的情况下对C++发出 http 请求
- C++ Boost 1.66 使用 Beast http 请求解析器解析字符串
- 在新线程C++中发送 http 请求
- 有什么方法可以通过按下按钮将HTTP请求从JS发送到C
- 套接字"Resource temporarily unavailable"的原始 HTTP 请求