C++ 在多线程模式请求中,Qt http get请求始终返回状态代码0

C++ 在多线程模式请求中,Qt http get请求始终返回状态代码0,c++,http,request,qthread,C++,Http,Request,Qthread,我在简单http客户机中有一个简单的请求方法,QRunble worker正在调用该方法 请求的所有返回者的状态均为0, 经过几次测试后,我发现更多的是,当我让应用程序运行一个线程时, 只有一个url来处理它的工作良好,我得到状态200。 我怀疑我的http客户端代码中有东西正在运行,不支持多线程模式 以下是我的完整httpclient代码: 这是请求的代码: #ifndef _HttpClient_ #define _HttpClient_ #include <QNetworkAcce

我在简单http客户机中有一个简单的请求方法,QRunble worker正在调用该方法 请求的所有返回者的状态均为0, 经过几次测试后,我发现更多的是,当我让应用程序运行一个线程时,
只有一个url来处理它的工作良好,我得到状态200。 我怀疑我的http客户端代码中有东西正在运行,不支持多线程模式 以下是我的完整httpclient代码:

这是请求的代码:

 #ifndef _HttpClient_
#define _HttpClient_
#include <QNetworkAccessManager>
#include <QtNetwork>
#include <QUrl>

QT_BEGIN_NAMESPACE
class QSslError;
class QAuthenticator;
class QNetworkReply;
QT_END_NAMESPACE

class HttpClient : public QObject
{
     Q_OBJECT   
    public:
        HttpClient(QFile* file,QMutex* mutex);
        ~HttpClient();
         void startRequest(QString& url);
    public slots:
    #ifndef QT_NO_OPENSSL
        void sslErrors(QNetworkReply*,const QList<QSslError> &errors);
    #endif
    private:
        QString m_sUrl;
        QUrl m_url;
        QNetworkAccessManager* m_networkManager;
        QNetworkReply *reply;
        int httpGetId;      
        void HandleNetworkError(QNetworkReply::NetworkError& networkError,
                                QNetworkReply *networkReply);   
};

#endif

------------------------------------

#include "HttpClient.h"
#include <QMutexLocker>
#include <QTextStream>

HttpClient::HttpClient()
{
     m_networkManager = new QNetworkAccessManager(this);
}
HttpClient::~HttpClient()
{
;
}

void HttpClient::startRequest(QString& url)
{
     QNetworkRequest request;
     request.setUrl(QUrl(url));
     QEventLoop loop;
     reply = m_networkManager->get(request);
     connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
     loop.exec();
     LOG_MSG("Is UrlAlive?:"+url.toStdString())
     QString ApiResponse;
     QByteArray data=reply->readAll();
     ApiResponse.append(QString::fromUtf8(data));
     int iStatusCodeV =  reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
     if (reply->error()) {
        QNetworkReply::NetworkError networkError = reply->error();
        HandleNetworkError(networkError,reply); 
     }
    QString s = QString::number(iStatusCodeV);
    reply->deleteLater();
    reply = 0;

}
void HttpClient::HandleNetworkError(QNetworkReply::NetworkError& networkError,QNetworkReply *networkReply)
{
        if(networkError != QNetworkReply::NoError)
        {
            QString err = networkReply->errorString();
            LOG_MSG("HttpClient::HandleNetworkError:"+err.toStdString());
        }
}
#ifndef QT_NO_OPENSSL
void HttpClient::sslErrors(QNetworkReply*,const QList<QSslError> &errors)
{

        reply->ignoreSslErrors();   
}
#endif

为什么总是失败?

您是否检查了服务器端日志以了解那里发生了什么?您是否检查了所有其他函数是否返回“OK”?没有服务器端的http客户端向网站发出http请求,因此必须在某个地方有一个web服务器。尝试先连接到你控制的服务器,这样你就可以检查客户端和服务器端。我只是把url放在浏览器中,我很好地看到了网站。我想我发现了问题,它在多线程模式下发生,当我只处理1个url时,它工作正常,我更新了问题
void ThreadWorker::run()
{
    QMutexLocker lock(_m);
    startwork();
    lock.unlock();


}

void ThreadWorker::startwork()
{
    m_pHttpClient = new HttpClient();
    //each thread gets unique url
    m_pHttpClient->startRequest(m_url);

}