我使用QWebPage
下载网页及其所有资源。同时我想在这个过程中获得Qt下载的原始数据。通过从QNetworkReply
中读取void QNetworkAccessManager::finished(QNetworkReply * reply)
信息来做到这一点,信号不是一个好的解决方案,因为数据本身可能已被QWebPage
读取。这是因为如何从QWebPage使用QNetworkReply读取数据?
QNetworkReply是一个顺序访问 QIODevice中,这意味着一旦数据 从对象中读取,它不再保持 由设备。
根据detailed description的QNetworkReply
。
然而QWebPage
可以配置为使用自定义QNetworkAccessManager
与被覆盖的createRequest
方法
QNetworkReply * QNetworkAccessManager::createRequest (Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0)
我认为正确的解决方案是创建一个代理QNetworkReply
并在createRequest
方法返回。该代理应允许从原始QNetworkReply
(以便QWebPage
可以从中读取数据)的情况读取回复数据,但同时该代理应该允许其他对象在通过QWebPage
读取数据后读取数据。换句话说,我们需要tee为QNetworkReply
的IODevice
基类。
如何编写此代理?
嗨Piotr,你知道代理是否仍然可用吗?该链接似乎被破坏。 – izyda 2015-08-21 05:13:19
@izyda它看起来像链接暂时不可用 - *存储库很快就可用于只读访问,保留原始克隆URL。* – 2015-08-21 15:37:20
明白了。在旁注中,您是否发现子类化QtNetworkResponse比使用peek()更好? – izyda 2015-08-21 16:39:51