Добрый день. Решил в рамках изучения 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;
}
}