Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Qt http get request always returns status code 0 in multi thread mode requests
QtWS25 Last Chance

Qt http get request always returns status code 0 in multi thread mode requests

Scheduled Pinned Locked Moved General and Desktop
1 Posts 1 Posters 1.6k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • U Offline
    U Offline
    umen242
    wrote on last edited by
    #1

    i have simple request method inside simple http client , that QRunnble worker is invoking all the returners of the request are status 0 , what more i spotted after few tests is, when i give the app to run with 1 thread that is
    only 1 url to process its working fine and i get status 200 . i suspect something in my http client code is worng and does not support multi thread mode here is my full httpclient code:

    this is the code of the request :

    @#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@

    all of this called from QRunnble method that looks like this :

    @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);

    }@

    why its failing all the time?

    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved