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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Куки  (Прочитано 4023 раз)
thechicho
Гость
« : Сентябрь 30, 2011, 18:25 »

Пипл, научите с куками работать!
Я уже несколько дней пытаюсь, и никак не догоню как сохранять куки и повторно их использовать (авторизация + хождение по сайту).

Реальным примером, плз!
а то я нуб в с++ и многое не понимаю.
Записан
SimpleSunny
Гость
« Ответ #1 : Октябрь 01, 2011, 12:43 »

А что конкретно не получается?
Записан
thechicho
Гость
« Ответ #2 : Октябрь 01, 2011, 18:24 »

ну, не получалось сохранить куки, чтобы потом отправлять их в запросах к страницам сайта.

сделал через жопу, но работает. буду признателен, если поделитесь кодом как это делается средствами Qt (я не смог осилить) и скажите как улучшить код (хоть каждую строку).

Код
C++ (Qt)
// Сохраняю в файл и считываю в переменную (потом я наверн "на лету" буду редактировать, без сохранения в файл, но пока так сойдет)
QByteArray cookieFromHeaders = reply->rawHeader("Set-Cookie");
writeOnFile("d:/cookies.txt", cookieFromHeaders);
QByteArray cookiesRead = readOnFile("d:/cookies.txt");
 
void MainWindow::writeOnFile(QString fileName, QByteArray data)
{
   QFile file(fileName);
   file.open(QIODevice::Append);
   QTextStream out(&file);
   out << data << " ";
   file.close();
}
 
QByteArray MainWindow::readOnFile(QString fileName)
{
   QFile file(fileName);
   file.open(QIODevice::ReadOnly);
   QString data = file.readAll();
   file.close();
 
   QString cleardata = data.replace("Path=", "");
 
   QRegExp rx("([^\\s]+=(?:.+|);)");
   rx.setMinimal(true);
   QByteArray newdata;
   int pos = 0;
 
   while ((pos = rx.indexIn(cleardata, pos)) != -1) {
       newdata += rx.cap(1) + " ";
       pos += rx.matchedLength();
   }
 
   QByteArray rnewdata = newdata.trimmed();
   rnewdata.chop(1);
 
   return rnewdata;
}
 
// Делаю запрос
 
QNetworkRequest request;
request.setRawHeader("Cookie", cookiesRead);
request.setUrl(QUrl(url));
qnam->get(request);
« Последнее редактирование: Октябрь 01, 2011, 18:28 от thechicho » Записан
zenden
Гость
« Ответ #3 : Октябрь 01, 2011, 18:49 »

Вообще-то QNetworkAccessManager сам находит в ответе Set-Cookie и устанавливает их, когда надо, то есть от Вас никаких дополнительных телодвижений не надо.

Еще посмотрите QNetworkAccessManager::cookieJar(), если вам действительно нужно манипулировать кукисами.
« Последнее редактирование: Октябрь 01, 2011, 18:53 от zenden » Записан
thechicho
Гость
« Ответ #4 : Октябрь 01, 2011, 19:10 »

// Вообще-то QNetworkAccessManager сам находит в ответе Set-Cookie и устанавливает их, когда надо, то есть от Вас никаких дополнительных телодвижений не надо.

хз хз. смотрите. чтобы авторизоваться на сайте, необходимо сначала зайти на сайт (get на сайт 1 www.blabla.ru). заходим на сайт, получаем куки. вводим логин и пароль, отправляем пост запрос с куками (post на сайт 2 www.blabla.ru/kakayanithuinatipasessionid). плюс еще возможен редирект.
я отправлял запросы без кук. авторизация то происходила, то не происходила. я не мог понять почему она происходила вообще, я же куки не отправлял. если, как вы грите, QNetworkAccessManager сам обрабатывает печеньки, то выходит, что когда она происходила, QNetworkAccessManager верно обрабатывал куки, когда не происходила - неверно. но это в принципе пофик, т.к. когда я стал сохранять куки и использовать их в запросе - авторизация 100% проходила.

// Еще посмотрите QNetworkAccessManager::cookieJar(), если вам действительно нужно манипулировать кукисами.
Да чо только я не смотрел... там как-то другой класс надо чтоле присоединять... какие-то protected... короче я не понимаю как им пользоваться.
было бы круто если бы Вы на пальцах объяснили что да как. было бы ваще супер, если бы на конкретных примерах)
« Последнее редактирование: Октябрь 01, 2011, 19:13 от thechicho » Записан
SimpleSunny
Гость
« Ответ #5 : Октябрь 01, 2011, 20:46 »

Сайт - это вконтакте.ру?
Записан
thechicho
Гость
« Ответ #6 : Октябрь 01, 2011, 20:51 »

не. это белый проект. работа со статистикой билайна. сестренке делаю, а то руками это все жопно обрабатывать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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