问题标签 [qnetworkrequest]

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 回答
95 浏览

python - 如何通过 QNetworkAccessManager 等待两个异步下载完成?

===总结 ============================================

我使用 QNetworkAccessManager 和 QNetworkRequests 同时下载两个图像。我如何确定两次下载已完成?

=== 详细说明 ================================

我有两个图像的 URL,我想异步下载它们。为此,我初始化 QNetworkAccessManager 并使用两个 QNetworkRequest。完成后,每个请求都会将图像的内容写入文件。

问题是两个请求彼此都不知道,因此无法验证另一个请求是否完成

你能告诉我如何等待这两个请求完成吗?

这是完整的代码:

0 投票
1 回答
95 浏览

c++ - QNetworkRequest 导致内存损坏

我创建了一个库,它将处理所有 HTTP 请求并解析 JSON 格式的响应数据。当我在我的主应用程序(使用 GUI)中调用包含 get 请求的方法时,我收到了内存损坏错误。所以我添加了 QEventLoop 和一个计时器来等待响应,然后再继续其他进程。我可以通过调用 QNetworkReply.readall() 来获取响应数据。我需要获取响应数据的 char* 值,所以我调用了 QNetworkReply.data() 但它是空的。为什么?

以下是我写的代码:

处理 HTTP 请求的库:

主要的 GUI 应用程序:

下面是使用 QEventLoop 的代码:

我期待来自 HTTP 获取命令的响应数据:"{"count":3,"codes":["x00000A","x00000B","x00000C"]}"

问题:实现这一点的最佳方法是什么?我想将所有 HTTP 请求放在一个库中,然后用 GUI 将其称为我的主应用程序。请注意:

  • 当我在库中使用 QEventLoop 等待响应时, QNetworkReply.data() 为空。我需要 QNetworkReply.data() 的值进行解析。
  • 当我没有使用 QEventLoop 并且单独使用信号和槽时(如上面的代码所示),在执行 HTTP get 命令后,主应用程序发生内存损坏。没有收到响应数据。
0 投票
1 回答
59 浏览

c++ - 如何获取 URL 的状态?

我正在使用 Qt,我应该做的是给出一个QString包含我的 URL,在打开页面之前,我想知道这是否可以访问。

我阅读了 的文档,QNetworkReply发现不同类型的错误有不同的代码(例如:在服务器上找不到远程内容 -> 代码 203)。

问题是:从 my 开始QString,如何获取这些代码值?

0 投票
0 回答
12 浏览

qnetworkaccessmanager - 使用 QNetworkAccessManager 对象下载 Json 内容时的空缓冲区

我正在使用 URL 和 QNetworkAccessManager 类下载 json 文件。对于小于 50 MB 的较小文件,我能够成功下载这些文件。但是当大小进一步增加时,我得到一个成功代码作为成功(200),当我尝试从 json 内容访问 Bytearray 时,返回的 bytearray 是空的。

代码如下。

QString url = "我的获取内容的 URL";
QNetworkRequest requestGetLabels(QUrl::fromEncoded(url.toLocal8Bit()));

requestGetLabels.setRawHeader("授权", m_linkCredentialsBytes);

// 设置头部类型 requestGetLabels.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");

QNetworkAccessManager *restApiClient = new QNetworkAccessManager();

QNetworkReply *replyGetLabels = restApiClient->get(requestGetLabels);

0 投票
0 回答
115 浏览

redirect - QT 中的 FollowRedirectsAttribute vs RedirectPolicyAttribute vs RedirectPolicy

我试图实现QNetworkRequest::UserVerifiedRedirectPolicy,这是我当前的设置,没有使用任何重定向,

当通过可能的例子时,发现这个问题,Follow redirects in QT5.5 As per OP here, the url redirects in QT5.6+ works just by setting QNetworkRequest::FollowRedirectsAttribute.

根据文档,QT6 的默认重定向策略是NoLessSafeRedirectPolicy并且需要redirected插槽。那么这是否意味着在 QT5.6+ 中重定向会自动工作而不使用QNetworkReply::redirected()插槽?

我找不到任何解释该行为的文档,也找不到一个很好的实现示例,UserVerifiedRedirectPolicy尽管我在这里找到了一个以 QT4 方式实现它QNetworkAccessManager 不处理 HTTP Status Code 308,但如果可能的话,我不想使用 QT4 方式,任何想法?

0 投票
0 回答
65 浏览

c++ - 使用 QNetworkReply 请求 POST 超时

我正在使用基于 4.8 版的 QtCreator 为使用带有操作系统的 linux 的设备开发应用程序。

我正在尝试在 QT 中下订单我正在使用以下库

我有以下代码片段

我总是收到以下错误

我试图创建一个新的 url 进行通信,但我不断收到同样的错误。

设备已正确连接到互联网。我已经完成了 ping 程序并且设备可以正常通信

0 投票
0 回答
34 浏览

c++ - 为什么qt不进入foreach循环?

这是我的代码。它从数据库中检索想要的信息,但它没有进入 foreach 循环,所以我不能将响应数据包含到 saldo 属性中。

0 投票
1 回答
294 浏览

api - 如何在 QT 中使用表单数据创建 HTTP 请求

我正在尝试向其中包含键值对表单数据的服务器发送 HTTP 请求。但我认为我在发送请求时遗漏了一些东西,这就是为什么我没有从服务器收到正确的响应并且我无法得到其中遗漏的东西。

我有一个生成地形数据并创建其文件的 API。这是我的卷曲请求

当我点击邮递员的请求时,它会给出正确的输出,但是当我从代码中点击 api 时,它会给我“\n”作为响应。

这是我在 QT 中的相同代码

在这里,我将 kay/value 对中的数据发送到 QByteArray 并将此主体设置为多端口。我尝试过这种方式,但没有得到预期的结果。预期结果是生成文件的链接。

谁能告诉我我做错了什么,或者有没有其他方法可以将 kay-value 对 form-data 分配给 QT 中的请求。

0 投票
0 回答
19 浏览

qt - 带有加号“+”的 QNetworkRequest vs S3 登录路径

我正在尝试找到一种方法来使用 QNetworkRequest/QUrl 将文件上传到 S3,并在路径中使用加号“+”字符。

AWS S3 服务将“+”字符解释为空格,从而违反了 HTTP 规范。例如,给定一个 PUT 请求,该请求在网络上以此开头:

亚马逊会将其解释为“我的文件.jpg”。解决方法是将请求发送为:

问题是似乎没有办法让 QNetworkRequest/QUrl 编码 + 字符。有任何想法吗?

这是亚马逊的错误,但他们永远不会修复它。多年前在此线程中提到过:https ://forums.aws.amazon.com/thread.jspa?messageID=722673 。

0 投票
0 回答
22 浏览

qt5 - 与桌面应用程序和 WebAssembly 应用程序不同的行为

我的应用程序是使用 Qt WebAssembly 框架版本 5.15.1 开发的前端客户端。如果我运行在 mingw 64 位或 webassembly 上编译的应用程序,我会有不同的行为。

我想从服务器获取一个 xml 文件,我通过 RESTful api 询问这个文件。

当我以桌面模式 [1](使用 mingw 64 编译)运行我的应用程序时,收到的有效负载(我使用QNetworkReply::readAll)是正确的。我没有问题地阅读了xml。

当我在 Chrome 中以 web 模式 [2](使用 webassembly 编译)运行我的应用程序时,我的程序出现故障,因为使用 QNetworkReply::readAll 读取的 QNetworkReply(与 QNetworkAccessManager 相关联)有效负载返回 qt 主页“qt.io”。

我在配置 QNetworkRequest 实例所需的 QUrl 实例中设置了架构、主机、端口。我试图在我的 QNetworkAccessManager istance 中设置主机和端口。

该请求由QNetworkAccessManager::get执行 。beetwen [1] 和 [2] 的唯一区别是编译过程。我对模式、主机、端口和请求使用相同的值。有人可以帮我理解这种行为吗?

这是我的代码的一部分: