如何在QT中同步发送HTTP请求?

以下代码使用QT的网络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。我应该怎么做? 顺便说一句,还有其他同步方式可以在QT中发送Http请求吗?

nt890121 回答:如何在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;
            }
        }
本文链接:https://www.f2er.com/3165981.html

大家都在问