Russian Qt Forum

Qt => Работа с сетью => Тема начата: ieroglif от Июнь 26, 2010, 12:50



Название: [Решено] QNetworkAccessManager и QNetworkCookieJar
Отправлено: ieroglif от Июнь 26, 2010, 12:50
есть у меня несколько (два :) ) вопросов:
1. сравнение QNetworkAccessManager и QHttp. второй меня радовал в своё время тем, что каждый ответ можно было чётко идентифицировать с запросом по id. В первом же до сих пор не могу понять как это делается. Ответ пришёл, а откуда? Есть, вроде, QNetworkRequest QNetworkReply::request(); однако у меня не получилось пока с ним работать. Попытка была простой - перез запросом я сохранял свой request в QList, а при получении ответа пытался сравнить list и reply->request() однако совпадать они не пожелали (хотя запрос всего один и никуда не денешься по идее). Так что вопрос: как чётко соотносить reply с request?
2. QNetworkCookieJar. Сохранить его никак у меня не получилось, вытащить оттуда все куки каким-нить удобным методом - тоже. А я обращаюсь к одному и тому же сайту под разными логинами, так что управление куками для меня обязательно (не надо меня обвинять в спамописательстве - спам не пишу, а чего пишу - не важно ;) ). Пока решил проблему "руками" - разбирая присланные куки и так же их сохраняя. Однако мне это как-то не нравится. Есть другие варианты?


Название: Re: QNetworkAccessManager и QNetworkCookieJar
Отправлено: SABROG от Июнь 26, 2010, 13:35
Я объявляю массив QHash<QNetworkReply*, MyStruct>, в MyStruct помещаю всю необходимую информацию такую как запрашиваемый (базовый) Url до редиректов и т.п., время запуска запроса, хендлер на открытый файл для записи контента, количество попыток получить желаемую страницу и тому пдобную информацию.

QNetworkCookieJar нужно наследовать, чтобы получить доступ к QList<QNetworkCookie> QNetworkCookieJar::allCookies () const   [protected], потом просто поставишь свой класс через void QNetworkAccessManager::setCookieJar ( QNetworkCookieJar * cookieJar ).


Название: Re: QNetworkAccessManager и QNetworkCookieJar
Отправлено: serg_hd от Июнь 26, 2010, 13:38
Да, по второму вопросу всё просто:

.h:
Код
C++ (Qt)
#ifndef _REMADEDNETWORKCOOKIEJAR_H
#define _REMADEDNETWORKCOOKIEJAR_H
 
#include <QList>
#include <QNetworkCookie>
 
class RemadedNetworkCookieJar: public QNetworkCookieJar
{
public:
RemadedNetworkCookieJar();
virtual ~RemadedNetworkCookieJar();
QList<QNetworkCookie> getAllCookies();
void setAllSitesCookies(const QList<QNetworkCookie>& cookieList);
};
 
#endif
/* _REMADEDNETWORKCOOKIEJAR_H */
 

.cpp:
Код
C++ (Qt)
#include "RemadedNetworkCookieJar.h"
 
RemadedNetworkCookieJar::RemadedNetworkCookieJar() {}
 
QList<QNetworkCookie> RemadedNetworkCookieJar::getAllCookies()
{
return this->allCookies();
}
 
void RemadedNetworkCookieJar::setAllSitesCookies(const QList<QNetworkCookie>& cookieList)
{
this->setAllCookies(cookieList);
}
 
RemadedNetworkCookieJar::~RemadedNetworkCookieJar() { }
 

У себя в проге сохраняю кукизы в БД (sqlite) когда надо и когда надо извлекаю. Всё в отдельных потоках, работает как часы, никаких проблем.


Название: Re: QNetworkAccessManager и QNetworkCookieJar
Отправлено: ieroglif от Июнь 26, 2010, 13:56
спасибо. таких подробных ответов даже не ожидал :)


Название: Re: [Решено] QNetworkAccessManager и QNetworkCookieJar
Отправлено: serg_hd от Июнь 26, 2010, 17:11
и в то же время не совсем понятно зачем методы allCookies и setAllCookies - protected.
Хз, удобно было бы их юзать как public, чем наследовать ради них QNetworkCookieJar.


Название: Re: [Решено] QNetworkAccessManager и QNetworkCookieJar
Отправлено: thechicho от Сентябрь 30, 2011, 09:09
Цитировать
У себя в проге сохраняю кукизы в БД (sqlite) когда надо и когда надо извлекаю. Всё в отдельных потоках, работает как часы, никаких проблем.

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