标签: qnetworkreply

如何从 QNetworkReply 读取内容(http 响应正文)

我正在使用 qt5.3,在发布之前我搜索了很多。

我想从QNetworkReply. 我有一个QWebView,我还需要读取 http 响应QWebView以显示网页。我需要的只是记录 Web 内容或对 http 帖子的任何响应。

问题是QNetworkReply某些东西只能读取一次。

  1. 如果我readAll()在选择readyRead()信号时调用,我将获得完整数据。但它会被清除,所以QWebView什么都不显示(它不会得到任何回复数据)。

  2. 或者如果我选择finished()信号,因为数据已经被QWebView(或QNetworkAccessManager)读取,如果我readAll()在这里打电话,我什么也得不到。是否有某个地方QNetworkReply,或经理或任何班级,存储我仍然可以读取的数据?

在#1 中,如果我调用peek(). 该函数不清除响应数据。但是如果响应体很大,它就行不通。这QNetworkReply是一个连续的东西,我既不能知道它的数据,也不能比缓冲的更进一步。

我不知道如何处理这个......

我只想监视和记录在我的QWebView...上发出的任何请求的请求和响应正文。

编辑:请注意,我要从响应中读取的数据大到 1MB,因此如果不进一步阅读就无法查看整个数据。

c++ qt response qwebview qnetworkreply

7
推荐指数
1
解决办法
2306
查看次数

如何从 QNetworkReply 读取数据?

如何QNetworkReply在 QWebPage 之前从特定 URL的响应中读取数据?但是当finished()发出信号时,QWebPage 已经读取了回复,因此连接readyRead()或调用不reply->readAll()返回任何内容。我在自己的 QWebPage 类中尝试了重载 acceptNavigationRequest() 方法,如下所示:

bool webPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, QWebPage::NavigationType type)
{
    //qDebug() << "filename = " << request.rawHeader("content-disposition");

    if(request.url().path() == QStringLiteral("download.php"))
    {
        QNetworkReply *reply = networkAccessManager()->get(request);
        QFile file;
        file.setFileName(filename);
        if(!file.open(QIODevice::ReadWrite))
        {
            /* handle error */
        }
        file.write(reply->readAll());
        file.close();
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

但是我无法回复工作......返回的回复无效(甚至不返回http状态代码,我知道这意味着发送的http请求无效但我不知道为什么)。

欢迎使用不同的方法来解决这个问题!

c++ qt qt5 qnetworkreply windows-10

6
推荐指数
1
解决办法
4840
查看次数

QNetworkReply 总是发出 finish() 吗?

我阅读了 signal finish() 的文档,它并没有说 finish() 总是被发出。我读到了 error() 信号:

void QNetworkReply::error(QNetworkReply::NetworkError code) 当回复检测到处理错误时发出此信号。Finished() 信号可能会随之而来,表明连接已结束。

code 参数包含检测到的错误的代码。调用 errorString() 获取错误情况的文本表示。

注意:不要删除连接到该信号的槽中的对象。使用deleteLater()。

另请参见 error() 和 errorString()。

该行是否The finished() signal will probably follow意味着在某些情况下 QNetworkReply 不会发出 finish() ?

qt qnetworkreply

5
推荐指数
1
解决办法
1632
查看次数

Qt - 获取互联网上托管的网页的源代码(HTML代码)

我想获取网页的源(HTML),例如StackOverflow的主页.

这是我到目前为止编码的内容:

QNetworkAccessManager manager;
QNetworkReply *response = manager.get(QNetworkRequest(QUrl(url)));

QString html = response->readAll(); // Source should be stored here
Run Code Online (Sandbox Code Playgroud)

但没有任何反应!当我尝试获取html字符串的值时,它是空的("").

那么该怎么办?我正在使用Qt 5.3.1.

html qt qnetworkaccessmanager qnetworkrequest qnetworkreply

4
推荐指数
3
解决办法
8930
查看次数