我正在Qt中编写一个类,该类从Bricklink API(一个LEGO数据库)中检索信息。它使用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可以在更大的集合上使用。
有什么想法可以找到导致此问题的原因吗?
答案 0 :(得分:0)
有时您会迷失方向。
我的代码确实有效,但是我依靠qDebug()
来显示结果。我必须停止这样做,因为qDebug()
有大小限制。因此,它没有显示结果。
我永远不会忘记这个... ;-)