将QNetworkRequest设置为始终PreferCache

Set QNetworkRequest to always PreferCache

本文关键字:PreferCache QNetworkRequest 设置      更新时间:2023-10-16

我有一个QWebView,我已经创建了一个QNetworkDiskCache并对其进行了设置。现在我想确保所有QNetworkRequest始终使用PreferCache而不是PreferNetwork。

我该如何设置?通过似乎没有明显的方法

webView->page()->networkAccessManager()

当然,我想知道,如果我真的需要这样做,我想实现的是:我有一个自定义浏览器,它连接到一个特殊的intranet网站,我希望它几乎永久缓存服务器发送的所有图像、css和js,除非另有说明。

我该如何做到这一点?

您可以派生类QNetworkAccessManager并重新定义其虚拟函数createRequest,如下所示:

QNetworkReply * MyNetworkManager::createRequest(
    QNetworkAccessManager::Operation operation, 
    const QNetworkRequest & originalRequest, 
    QIODevice * device) 
{
    QNetworkRequest request = originalRequest;
    if(request.attribute(QNetworkRequest::CacheLoadControlAttribute) == 
       QNetworkRequest::PreferNetwork)
    {
        request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, 
            QNetworkRequest::PreferCache);
    }
    return QNetworkAccessManager::createRequest(operation, request, device);
}