Есть ли предел данных для ответов QNetworkReply? - PullRequest
0 голосов
/ 22 января 2019

Я пишу класс в Qt, который получает информацию из Bricklink API (база данных LEGO).Он использует класс QOAuth1 для аутентификации и QNetworkReply для захвата ответа от HTTP-запросов GET.Это работает нормально, если только данные, которые извлекаются, не слишком велики.

В приведенном ниже примере я запрашиваю конкретный инвентарь (список частей LEGO).Когда я запрашиваю 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 работает с большими наборами.

Есть идеи, что можно сделать, чтобы найти причину этой проблемы?

1 Ответ

0 голосов
/ 22 января 2019

Иногда вы заблудились, глядя в неправильном направлении.

Мой код работал, но я зависел от qDebug(), чтобы показать результаты.Я должен прекратить это делать, потому что qDebug() имеет ограничение по размеру.Как таковой он не показал результатов.

Я никогда не забуду это ... ;-)

...