Есть ли предел данных для ответов QNetworkReply?
Я пишу класс в 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 ответ
Иногда вы заблудились, глядя в неправильном направлении.
Мой код работал, но я зависел от qDebug()
показать результаты. Я должен прекратить это делать, потому что qDebug()
имеет ограничение по размеру. Как таковой он не показал результаты.
Я никогда этого не забуду...;-)