Russian Qt Forum

Qt => Работа с сетью => Тема начата: Alex Custov от Июль 08, 2014, 19:12



Название: QNetworkDiskCache и redirect
Отправлено: Alex Custov от Июль 08, 2014, 19:12
Есть QNetworkAccessManager с установленным кешем QNetworkDiskCache, никакой магии...

Код
C++ (Qt)
   manager = new QNetworkAccessManager(this);
 
   QNetworkDiskCache *cache = new QNetworkDiskCache(this);
 
   // 100 Mb
   cache->setMaximumCacheSize(100*1024*1024);
   cache->setCacheDirectory("cacheDir");
 
   manager->setCache(cache);
 
   QNetworkRequest request(QUrl("http://yandex.ru"));
 
   request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferNetwork);
   request.setAttribute(QNetworkRequest::CacheSaveControlAttribute, true);
 
   manager->get(request);

Данные грузятся из сети, всё вроде бы нормально. Теперь отключаем сеть, устанавливает режим контроля кеша в QNetworkRequest::AlwaysCache вместо QNetworkRequest::PreferNetwork, компилируем, запускаем... Результат - QNetworkReply::error() возвращает ошибку 203 (QNetworkReply::ContentNotFoundError). А всё потому, что я грузил yandex.ru, и произошёл редирект на yandex.by (который я обработал самостоятельно), и в кеш попали данные из yandex.by. Сайты без редиректов в этой ситуации работают нормально - отображается закешированная страница. Вопрос - какие есть мысли что с этим делать? В сети ничего не нашёл по этому поводу.