Russian Qt Forum
Ноябрь 23, 2024, 00:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Получение cookies с сервера http. Help!  (Прочитано 4104 раз)
ivanmara
Гость
« : Декабрь 12, 2014, 20:12 »

Добрый день. Решил в рамках изучения QT написать простенький http клиент. Получается получать ответ сервера. С этим вопросов нет. но когда начинаю работать с cookies получается полная неопределенность. Открываю firefox в нем firebug. Начинаю смотреть сколько куки пришло и сравнивать с прогой на Qt. Допустим скажем c ya.ru в firebug для домена прилетают 4 куки, а в программе показывает что пришла только одна. Или скажем для www.elite-games.ru вообще ни одной куки не поступает. Сначала подумал что сервер не может определить user-agenta. В программе прямо указал закос под firefox. Но всё равно тоже самое. Не могу разобраться может кто подскажет что я делаю не так? Тестовый исходник с проектом (qt .5.3) прилагается как и сам код.

Код:
#include <QCoreApplication>
#include <QDebug>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QUrlQuery>
#include <QNetworkCookieJar>
#include <QList>
#include <QNetworkCookie>


void sendRequest();

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    sendRequest();
    return a.exec();
}

void sendRequest(){

    // create custom temporary event loop on stack
    QEventLoop eventLoop;

    // "quit()" the event-loop, when the network request "finished()"
    QNetworkAccessManager mgr;
    QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));

    // the HTTP request
    QNetworkRequest req;

    QUrl url = QUrl("http://www.elite-games.ru");

    req.setUrl(url);
    req.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0");

    QNetworkReply *reply = mgr.get(req);
    eventLoop.exec(); // blocks stack until "finished()" has been called

    QByteArray bytearray;

    if (reply->error() == QNetworkReply::NoError)
    {
        //succes
        QList<QNetworkCookie> cookies = mgr.cookieJar()->cookiesForUrl(url);
        //qDebug() << "COOKIES for" << url.host() << cookies2;

        for( int i = 0; i < cookies.count(); ++i )
            qDebug() << cookies[i] << endl << endl;

        qDebug() << "COOKIES count: " <<  cookies.count();

        bytearray = reply->readAll();

        qDebug() << "Success. Bytes recived: " << bytearray.size();
        delete reply;
    }
    else
    {
        //failure
        qDebug() << "Failure" << reply->errorString();
        delete reply;
    }
}

« Последнее редактирование: Декабрь 12, 2014, 23:00 от ivanmara » Записан
ivanmara
Гость
« Ответ #1 : Декабрь 14, 2014, 17:47 »

Народ  протестируйте плиз. Возможно баг в самих qt либах.
Записан
Bepec
Гость
« Ответ #2 : Декабрь 15, 2014, 18:02 »

Лень, двигатель прогресса и данный форум не исключение Веселый
Если вспомню то вечером посмотрю.
Записан
ivanmara
Гость
« Ответ #3 : Декабрь 15, 2014, 20:28 »

Лень, двигатель прогресса и данный форум не исключение Веселый
Если вспомню то вечером посмотрю.

Жду ...
Записан
Bepec
Гость
« Ответ #4 : Декабрь 15, 2014, 20:52 »

Напоминать это правильно Веселый
Записан
Bepec
Гость
« Ответ #5 : Декабрь 15, 2014, 21:18 »

Код у вас правильный и работающий.
Вы не учитываете, на мой взгляд, достаточно вескую деталь - браузер принимая страничку, сразу же выполняет скрипты и прочую фигню на страничке, соответственно при их помощи может получить дополнительные куки.

А QNAM не выполняет ничего, он просто получает текст. Так что не парьтесь. Ну ещё у вас есть возможность при желании считать все скрипты и выполнить их.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.112 секунд. Запросов: 20.