2011-08-05 3 views
2

최근 온라인에서 저장 한 txt 파일을 수정할 수 있다는 것을 발견했습니다. QHttp 여전히 이전 버전을 사용하고 있습니다. 내 코드도 QtWebKit을 사용했습니다. 어쩌면이 문제와 관련이 있습니다. 아니면 그냥 캐싱을 방지하는 설정이 누락 되었습니까?QHttp/QtWebKit에서 캐싱 페이지를 멈추는 방법

(I 윈도우 7에서 Qt는 4.7.3을 사용하고 비주얼 스튜디오 2010 추가 기능과 함께 컴파일거야) 난 아무것도 캐싱에서 을 방지하기 위해 다음과 같은 QtWebKit을하고 있어요

-

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

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 파일을로드하는 데 사용하고 코드는

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 의하면 비록 이 거짓을 반환() = BOOL 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

이 바보 같은 제안처럼 보일 수 있습니다,하지만 ... 당신은 웹 브라우저에서 TXT를로드 봤어? 그리고 그것이 변경 사항을 업데이트하는지 확인 하시겠습니까? 문제가 어딘가에서 귀하의 애플 리케이션에 전혀있을 수 있습니다 ...

+0

어. 그냥이 게시물의 꽤 노인 ... 오, 잘 ... 당신이 상관 없어 희망을 알게되었습니다. – kralyk

관련 문제