2011-08-05 54 views
2

最近我發現我可以修改在線存儲的txt文件,然後當我使用QHttp獲取時,我仍然獲得以前的版本。我的代碼也使用QtWebKit所以也許這涉及到這個問題?或者,也許我錯過了一個可以防止緩存的設置?如何從緩存頁面停止QHttp/QtWebKit

(我使用Qt 4.7.3的Windows 7下,在Visual Studio 2010的外接編譯)

我是從什麼緩存執行以下操作以防止QtWebKit的 -

QWebSettings::globalSettings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); 
QWebSettings::globalSettings()->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, true); 
QWebSettings::setMaximumPagesInCache(0); 
QWebSettings::setObjectCacheCapacities(0, 0, 0); 
QWebSettings::clearMemoryCaches(); 

我使用加載TXT文件中的代碼如下 -

CacheHTML::CacheHTML(QObject* parent, QString urlId, QByteArray* bytes, QString stringUrl) : QObject(parent) { 
    this->urlId = urlId; 
    QUrl url = QUrl(stringUrl); 
    http = new QHttp(this); 
    connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(Loaded(int, bool))); 
    pBytes = bytes; 
    buffer = new QBuffer(pBytes, this); 
    buffer->open(QIODevice::WriteOnly); 
    http->setHost(url.host()); 
    fetchId = http->get(url.toString(), buffer); 
} 

我使用與此對應的時隙是 -

void CacheHTML::Loaded(int id, bool error) { 
    if(id != fetchId) 
     return; 
    if(error) { 
     emit CacheComplete(urlId, false); 
     return; 
    } 
    emit CacheComplete(urlId, true); 
} 

但是,一旦它從互聯網提取的txt文件,它似乎是緩存在某處/某種程度。無論我在txt文件中做什麼修改,當我運行我的代碼時,它仍然會緩衝原始文件。

我已經試過OrcunC的建議(見下文),但是這會導致接收一個空字符串,而不是txt文件的內容 -

CacheHTML::CacheHTML(QObject* parent, QString urlId, QByteArray* bytes, QString stringUrl) : QObject(parent) { 
    this->urlId = urlId; 
    QUrl url = QUrl(stringUrl); 
    http = new QHttp(this); 
    connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(Loaded(int, bool))); 
    pBytes = bytes; 
    buffer = new QBuffer(pBytes, this); 
    buffer->open(QIODevice::WriteOnly); 

    QHttpRequestHeader header("GET", url.path()); 
    header.setValue("Cache-Control", "no-cache"); 
    header.setValue("Host", url.host()); 

    http->setHost(url.host()); 
    fetchId = http->request(header); 
} 

我也試着用不同的方式爲實現它如下所示,但獲得了與txt文件正在緩存的結果相同的結果。即使檢查QNetworkReply完成槽與布爾fromCache = reply->屬性(QNetworkRequest :: SourceIsFromCacheAttribute).toBool()返回

QNetworkAccessManager* manager = new QNetworkAccessManager(this); 
    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(Loaded(QNetworkReply*))); 
    QNetworkRequest req = QNetworkRequest(QUrl(stringUrl)); 
    req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork); 
    req.setAttribute(QNetworkRequest::CacheSaveControlAttribute, false); 
    manager->get(req); 

我現在在我的智慧的結尾,所以任何人指出我在正確的方向非常感激。

回答

1

可能是一個代理緩存文件內容。試試下面清除緩存:

QHttpRequestHeader header("GET", "/mytext.txt"); 
header.setValue("Cache-Control", "no-cache"); 
header.setValue("Host", "myhost.com"); 

http->setHost("myhost.com"); 
fetchId = http->request(header); 
+0

感謝您的回覆 - 我嘗試了您的建議(並修改了原始問題以顯示代碼),但導致出現空字符串返回而不是txt文件的內容。 – Rok

0

這似乎是一個愚蠢的建議,但是......你嘗試裝載量在Web瀏覽器中的txt?並檢查它是否更新更改?這個問題可能在某種程度上,而不是在你的應用程序中...

+0

呃。只是看到這個帖子已經過時了......哦,好吧......希望你不要介意。 – kralyk

相關問題