QNetworkReply 响应是否有数据限制

Is there a data limit on QNetworkReply responses?

本文关键字:数据 响应 是否 QNetworkReply      更新时间:2023-10-16

我正在用Qt编写一个类,从Bricklink API(乐高数据库)中检索信息。它使用 QOAuth1 类进行身份验证,使用 QNetworkReply 捕获来自 HTTP GET 请求的响应。这工作正常,除非正在检索的数据太大。

在下面的示例中,我请求一个特定的库存(乐高积木列表)。当我请求category_id 142 时,我得到了一个包含 50 个零件的漂亮列表。但是 category_id 485 包含 75 个元素并且不返回任何内容。甚至没有错误。

void Category::getInventory()
{
    QUrl url("https://api.bricklink.com/api/store/v1/inventories");
    QVariantMap parameters;
    parameters.insert("category_id", "485"); // 75 elements not OK
//    parameters.insert("category_id", "142"); // 50 elements OK
    QNetworkReply *reply = bricklink.get(url, parameters);
    connect(reply, &QNetworkReply::finished, this, &Category::parseJson);
}
void Category::parseJson()
{
    QJsonParseError parseError;
    auto reply = qobject_cast<QNetworkReply*>(sender());
    if (reply->error()) {
        qDebug() << reply->errorString();
        return;
    }
    const auto data = reply->readAll();
    const auto document = QJsonDocument::fromJson(data, &parseError);
    if (parseError.error) {
        qCritical() << "Category::getCategory. Error at:" << parseError.offset
                    << parseError.errorString();
        return;
    } else {
        QString strReply = static_cast<QString>(data);
        qDebug() << strReply;
    }
}

我不知所措,找不到导致这种情况的原因。可以发送的数据是否有最大限制?还是某种超时?也许需要以块的形式捕获更大的数据?

当然,API 可能不会发送更大的数据集。作为测试,我尝试了相同的 node.js 解决方案,可以看到 API 确实适用于更大的集合。

知道我能做些什么来找到这个问题的原因吗?

有时你会迷失方向,盯着错误的方向。

我的代码确实有效,但我依靠qDebug()来显示结果。我必须停止这样做,因为qDebug()有大小限制。因此,它没有显示结果。

我永远不会忘记这一点... ;-)