问题标签 [qnetworkreply]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1309 浏览

qt - QNetworkReply 是否总是发出finished()?

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

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

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

注意:请勿删除与此信号相连的插槽中的对象。使用 deleteLater()。

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

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

0 投票
2 回答
198 浏览

qt - Qt、QNetworkAccess Manager下载大文件频繁失败

我正在使用以下代码通过 LAN 下载一些视频文件。

但是,下载经常失败,当回复完成信号被触发时,它并​​没有真正完成下载文件,而只是下载了一部分。我能做些什么来解决这个问题?

0 投票
0 回答
174 浏览

c++ - 使用 QNetworkAccessManager 和 QNetworkReply 模拟网络故障

我正在使用 Qt4.8,我想将网络故障注入到使用 QNetworkAccessManager 的预先存在的代码中。然而,这个类——尤其是相关的 QNetworkReply 似乎有一些奇怪的语义。我创建了 QNetworkAccessManager 的子类以及 QNetworkReply 的子类。我的 QTestNetworkAccessManager 返回由基础 QNetworkAccessManager 创建的对象,或列表中的下一个测试回复:

在单个请求的简单、微不足道的情况下,我的测试代码似乎可以工作,但是当我将它放在一个更大的应用程序中处理大量网络流量时出现了两个问题。

首先是 QNetworkAccessManager 似乎拥有它正在创建的 QNetworkReply 对象的私人知识。(基于检查 Qt 源代码)。例如,它创建了各种风格的 QHttpReplyImpl 和各种其他 Impl 对象,并以各种方式将它们连接起来,所以我的测试对象在那个环境中似乎不是好公民。这似乎会导致诸如 error() 信号无法正确传播以及我的内存空间遇到堆栈损坏等问题。

(我没有发布整个 QTextNetworkReply 对象,因为它非常简单,而且我的问题并不是要对我的特定代码进行故障排除。)

我的问题是:有没有人使用 QNetworkAccessManager 进行过这种故障注入,并且能够模拟各种 HTTP 故障。

一种想法是使用 HttpProxy 挂钩创建一个代理服务器,该服务器实际上在套接字级别注入数据,以便遍历整个 QHttp* 对象解析器,但这似乎很麻烦。

真的没有更简单的方法可以将故障注入 QNetworkAccessManager 使其就像在与实时服务器交谈吗?

谢谢!

PS我熟悉https://blogs.kde.org/2010/08/28/implementing-reusable-custom-qnetworkreply,这就是为什么我走上了继承QNAM的道路,但似乎没有正确处理错误语义并且与代码的链接被破坏。

0 投票
1 回答
92 浏览

c++ - 访问使用 QNetworkReply 检索的 html 表

我想阅读我在http://finance.yahoo.com/exchanges看到的表格的后缀列。

我用 阅读了页面QNetworkManager。将数据存储在QNetworkReply *reply. 如果我阅读了所有页面,reply->readAll()我获得了该页面,因此它被正确检索。我将它设置在 a 中QWebPage,然后我想检索其中的所有表。

为了获得我想使用QWebElement但我无法阅读的表格。我阅读了与我想要的相同级别的所有表格,但QWebElementCollection我获得的是空的。

我做错了什么,为了阅读表格我必须做什么?

0 投票
0 回答
118 浏览

qt - QT 5.5 - QNetworkReply 空数据

我已经回答了其他问题,但我没有找到答案。我在打印使用QNetworkAccessManager.

我需要登录网站来检索此代码。我有一个这样的插槽:

对于前两个步骤(连接),我可以在控制台中看到 HTML 代码。最后一步没有得到任何数据。没有重定向也没有错误。

现在,奇怪的是,当我更改代码以将页面显示为 webview 时,qDebug没有显示任何内容,但加载的代码在 webview 中正确显示。


好吧,我可以将内容保存到文件中。但我真的很想明白为什么我什么都看不到qDebug

0 投票
1 回答
50 浏览

c++ - Qt cpp 无法将 obj 发送到连接的函数

我需要从一个 url 获取一个 json 文件,将其填充到 QtNetworkReply *reply 中并在连接的函数中发送回复以将其转换为 QbyteArray 以解析我的 Json 响应。

但是当我进入连接的函数时,我无法用该回复填充 QByteArray(始终为空)这是我的代码:

这是我的连接功能:

我的 .H :

我不能 std::cout “已连接”,但总是退出并显示错误日志“6”。

我真的不知道我在哪里做错了(我习惯于 C,而不是 Cpp),我已经阅读了所有关于它的 Qt 人,但无法弄清楚出了什么问题。有任何想法吗?

谢谢你,并为薄弱的技能和英语道歉

0 投票
1 回答
740 浏览

qt - 从 QNetworkReply 读取写入文件

假设我已经执行了 aQNetworkRequest并获得了适当的QNetworkReply. 如果它是一个大文件(比如 1 GB),我如何创建一个 4k 字节数组缓冲区并将 4k x 4k 的数据读取到该数组中并同时将其写入打开的文件流?例如,等效的 C# 代码是这样的(我熟悉 C# 而不是 Qt):

- - 编辑

实际上,我正在尝试做的是在每次运行我的应用程序时下载恢复功能。每次我尝试恢复下载时,我都会设置range标题QNetworkRequest并获取其余数据,因此不需要立即写入数据,而是逐步写入数据。

0 投票
1 回答
71 浏览

qt - 如何确保 QNetworkReply::finished 确实被捕获

当我有这样的代码时:

如果在第一行和第二行之间回复完成了怎么办?比连接来晚,不是吗?

0 投票
0 回答
572 浏览

python - Python PyQt5 子类化 QNetworkAccessManager::createRequest 数据复制

在开发使用 PyQt5 的特定系统期间,我需要继承 QNetworkAccessManager 以覆盖 createRequest 方法。我这样做是为了在 WebView 呈现它们并清理缓冲区(这是一个 QIODevice)之前保存 HTTP 资源。

我正在使用 peek() 所以缓冲区在到达 webview 时不会被清除。

但是,有时缓冲区一旦到达 WebView 就不会被清除,我注意到它发生在 WebKit/WebView 不支持内容时,但似乎也发生在其他时间。由于我将数据附加到我自己的变量中(基于缓冲区随后被清除的事实),这会导致数据重复。

例如:

如果数据没有被清除,我最终会收到的消息可能是:

或其他重复的变体。

下面是产生上述错误的子类的片段。

0 投票
0 回答
718 浏览

qt - 使用 readyRead() 使用 QNetworkAccessManager / QNetworkReply 下载会吃掉我的 RAM

我有以下设置和场景:

  • QT/QML-应用程序运行,可以触发下载一个 20MB 的文件到/tmp/IMAGE(使用QNetworkManager(), QNetworkReply(), readyRead()
  • /tmp是一个 ramdisk - 有 40+MB 的可用空间(当 QT/QML 应用程序正在运行时)
  • 在 QT/QML 应用程序运行时,我可以轻松地wget将 20MB 文件/tmp/IMAGE

但是,当尝试通过 QT/QML 应用程序下载文件时(使用QNetworkManager(),QNetworkReply()readyRead()-signal,qt/qml 应用程序甚至在实际下载一半文件之前就被内存不足的杀手杀死了(根据downloadProgress()和的大小/tmp/IMAGE)。

据我了解,readyRead()它是专门为部分下载块、将其写入磁盘、清除其使用的 RAM 以及下载和写入下一个块而设计的。

然而,这种方法似乎比使用方法消耗更多的内存wget——在下载了 10MB 的文件之后,Qt/QML 应用程序有一个我无法解释的巨大内存占用。

我基本上在做什么,它将readyRead()我的插槽与我命名的插槽连接起来partialDownloadFinished()file->write(reply->readAll());

我还检查了块大小是否可能会变大 via bytesAvailable(),但似乎也并非如此。

我的下一个猜测是数据的下载速度比写入(ram)磁盘的速度要快,但似乎也并非如此。

所以我被困住了。有人对此有任何线索或暗示吗?

非常感谢!