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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с куками.  (Прочитано 15230 раз)
Fatalist
Гость
« : Октябрь 09, 2009, 05:24 »

Народ, помогите, пожалуйста, сам что-то сообразить не могу.
Стоит задача залогиниться на сайте. При этом сайт для авторизации пользует куки.
Я так понимаю, что надо сделать POST-запрос, содержащий логин и пасс, и получить в ответ куку, которую потом необходимо сохранить.
Интересна реализация с помощью QWebView и без него, когда подключение реализовано через QNetworkAccessManager.
Очень надеюсь на вашу помощь.
« Последнее редактирование: Февраль 05, 2010, 20:42 от Fatalist » Записан
SimpleSunny
Гость
« Ответ #1 : Октябрь 09, 2009, 09:09 »

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

Цитировать
QNetworkAccessManager by default does not implement any cookie policy of its own: it accepts all cookies sent by the server, as long as they are well formed and meet the minimum security requirements (cookie domain matches the request's and cookie path matches the request's). In order to implement your own security policy, override the QNetworkCookieJar::cookiesForUrl() and QNetworkCookieJar::setCookiesFromUrl() virtual functions. Those functions are called by QNetworkAccessManager when it detects a new cookie.
« Последнее редактирование: Октябрь 09, 2009, 09:14 от SimpleSunny » Записан
Fatalist
Гость
« Ответ #2 : Октябрь 09, 2009, 17:56 »

А каким боком их тогда можно сохранить, чтобы при следующем подключении подсунуть хосту?
Записан
SimpleSunny
Гость
« Ответ #3 : Октябрь 09, 2009, 20:32 »

Читать справку по QNetworkAccessManager.
>> QNetworkCookieJar * cookieJar () const
Записан
Fatalist
Гость
« Ответ #4 : Октябрь 11, 2009, 16:12 »

С помощью WireShark сравниваю отсылаемые данные моей проги с тем, что отсылает ГугльХром. Понимаю, что мой POST-запрос составлен абсолютно неверно. Больше всего смущает строка:
Код:
Cookie: CAD=70991521%231255259845%230%230%23%230; T3E=%3D%3DANhNmM4MmZ4YDO6YDOzEjNyUTNyEjO1ATNygDO3oTMtojO6oDO2AjM5oDMjgjNwITOjgjNwITO\r\n
Как это задать через заголовок моего запроса найти не могу, маны читал, но, видать, знаний не хватает..
Записан
SimpleSunny
Гость
« Ответ #5 : Октябрь 11, 2009, 16:38 »

1. Более правильный.
Код:
QNetworkAccessMAnager *manager;
manager->cookieJar()->setCookiesFromUrl(QList<QNetworkCookie>, QUrl("my_url"));
2. Менее правильный.
Код:
QNetworkRequest *request;
request->setRawHeader("Cookie", "CAD=122345; T3=abc");
manager->get(*request);
Записан
WaterProof
Гость
« Ответ #6 : Февраль 01, 2011, 00:04 »

Сорь, что поднимаю сей баян, но такая штука: чтобы задать куки, использую setRawHeader. Задаю, отправляю запрос, проверяю через httpAnalyzer v5, и вижу что ничего и не задалось ни шиша. Собственно пробовал и так:
Код:
request.setRawHeader("Cookie", "someparameter=somevalue");
и так:
Код:
QList<QNetworkCookie> cookies;
cookies.append(QNetworkCookie("remixchk", "5"));
cookies.append(QNetworkCookie("remixsid", "someparameter"));
request.setHeader(QNetworkRequest::CookieHeader, QVariant::fromValue(cookies));

Qt 4.7.1, MSVC. Подскажите, куда копать вообще...
ЗЫ. Делаю авторизацию десктоп приложения через апи вконтакте+задание прав без использования веб-браузера(как того требует вконтакте). Саму авторизацию сделал, а вот на задании прав споткнулся, ибо хоть убей не могу совладать с куками..  Обеспокоенный
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #7 : Февраль 06, 2011, 23:00 »

Странно, что не получается. Попробуй тогда использовать заранее подготовленный cookieJar с помощью метода
Код
C++ (Qt)
networkAccessManager()->setCookieJar(myCookieJar);
 
Некоторые моменты, которые, может быть, чем-то помогут.
Записан

kubuntu/Win7/x64/NetBeans
SimpleSunny
Гость
« Ответ #8 : Февраль 07, 2011, 01:12 »

Ничего удивительного, скорей всего, из-за того, что вы не убрали CookieJar (manager->setCookieJar(0)).

Код
C++ (Qt)
if (static_cast<QNetworkRequest::LoadControl>
       (request.attribute(QNetworkRequest::CookieLoadControlAttribute,
                          QNetworkRequest::Automatic).toInt()) == QNetworkRequest::Automatic) {
       if (d->cookieJar) {
           QList<QNetworkCookie> cookies = d->cookieJar->cookiesForUrl(request.url());
           if (!cookies.isEmpty())
               request.setHeader(QNetworkRequest::CookieHeader, qVariantFromValue(cookies));
       }
   }
И он, CookieJar, перезаписывает ваши "сырые" куки
Записан
WaterProof
Гость
« Ответ #9 : Февраль 07, 2011, 16:39 »

Спасибо за ответы, все получилось Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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