Следуйте перенаправлениям в QT5.5

У меня есть программа, которая хорошо работает с Qt 5.6

const QUrl qurl(url);
QNetworkRequest request(qurl);
//github redirects the request, so this attribute must be set to true, otherwise returns nothing
//from qt5.6
request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
QNetworkAccessManager manager;
QNetworkReply * reply = manager.get(request);

К сожалению, это работает только с Qt 5.6.

Может ли кто-нибудь помочь мне сделать перенаправление на Qt5.5 (Ubuntu 16.04). Думаю, мне нужно выполнить перенаправление вручную, но я не нашел по нему учебника.

Я нашел решение для Qt4 -> QNetworkReply и 301 редирект

Я надеялся, что для Qt5 есть что-то более "обновленное".

Спасибо


person Alberto Valero    schedule 17.07.2018    source источник
comment
Возможный дубликат QNetworkReply и 301 редиректа   -  person Alan Birtles    schedule 17.07.2018


Ответы (1)


Вот как я решил это в стиле Qt4, как в QNetworkReply и 301 редиректе.

Если у кого-то есть лучшее решение, напишите

    QNetworkAccessManager manager;
    QVariant possibleRedirectUrl;
    QNetworkReply * reply;

    QUrl qurl;
    qurl.setUrl(url);

    //we check if there is any redirect to follow it
    //from Qt 5.6 redirects can be automatically followed by setting
    //request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
    //here is done automatically becaus of Ubuntu 16.04 Qt version (5.5)

    do{
        qInfo() <<"Downloading " << qurl;

        QNetworkRequest request(qurl);
        reply = manager.get(request);

        qInfo() << "waiting to finish...";

        _timeout=false;
        _timer->start(timeout);

        //if download takes more time that set on timeout cancel download
        while(!_timeout){
            qApp->processEvents();
            if(reply->isFinished()) break;
        }

        _timeout = false;

        qInfo() << "finished!";

        possibleRedirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
        qurl = possibleRedirectUrl.toUrl();
        qInfo() << qurl;

    }while(possibleRedirectUrl.isValid());
person Alberto Valero    schedule 17.07.2018