2011-08-05 11 views
2

最近、私はオンラインで保存されたtxtファイルを変更できることを発見しました。QHttp私はまだ前のバージョンを取得しています。私のコードもQtWebKitを使用しています。多分これは何とか問題に関連していますか?それとも、キャッシュを妨げる設定が欠けているのでしょうか?QHttp/QtWebKitがページをキャッシュするのを止める方法

(私は、Windows 7の下のQt 4.7.3を使用して、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(); 

Iは次のように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); 
} 

私はこれに対応して使用しているスロットがある -

しかし、いったんインターネットから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

Uhh。ちょうどこのポストのかなり年老いたことに気付いた...ああ...あなたが気にしないことを願っています。 – kralyk

関連する問題