Привет.
Стоит задача написать клиент для работы в Инстаграм.
Имеет например 100 аккаунтов, и с каждого требуется авторизоваться.
Для реализации задачи, была выбрана асинхронная работа с
одним объектом
QNetworkAccessManagerРабота которого помещена в отдельный поток принимающий сигналы на выполнение сетевых запросов.
Так же для работы с cookies потребуется
QNetworkCookieJar.
в итоге имеем упрощенный код:
C++ (Qt)
//Constructor
MyClass::MyClass(QObject *parent) : QObject(parent)
{
this->QNAM = new QNetworkAccessManager(this);
QObject::connect(this->m_manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(replyFinished(QNetworkReply*)));
}
//----------------------------------------------------
//Public Slot
void MyClass::get(QString url, QNetworkCookieJar *cookies)
{
//Init Cookie
this->QNAM->setCookieJar(cookies);
QNetworkRequest request(QUrl(url));
this->QNAM->get(request);
}
//----------------------------------------------------
//Private Slot
void MyClass::replyFinished(QNetworkReply* reply)
{
QByteArray answer = reply->readAll();
}
Всё бы ничего, но в работе с cookie возникли проблемы.
При авторизации на сайте, каждому аккаунту назначаются индивидуальные cookie.
Если объект
QNAM получит в очередь на выполнение сетевые запросы, которые относятся к разным аккаунтам
например авторизоваться на сайте от имени 10 анкет....
то возникнет мешанина с cookie, так как объект
QNAM - один, а куков много.
Низнаю как решить эту проблему...
либо каждый раз создавать новый объект
QNAM (что не очень хочется делать)
Либо забыть про
QNetworkCookieJar, и в ручную помещать куки в QNetworkRequest , а после получения ответа сервера - вручную считывать куки.
Как бы вы организовали работу c одним объектом QNetworkAccessManager в асинхронном режиме с поддержкой разных cookie ?