gpt4 book ai didi

c++ - 在 C++ 中使用 cURL 获取 JSON 文件,较大的文件没有出现或者可能太大

转载 作者:行者123 更新时间:2023-11-28 05:14:44 27 4
gpt4 key购买 nike

我正在尝试使用 libcurl 解析 json 文件,然后使用现代 C++ 的 JSON 进行解析。但是,当我尝试从 url 获取 json 文件,然后将其作为字符串打印出来只是为了查看时,它成功地获取了像 http://validate.jsontest.com/?json=%5BJSON-code-to-validate%5D 这样的小文件。 , 但在像 http://reddit.com/r/front.json 这样的大文件上失败并且不显示任何内容

这里究竟发生了什么?我很确定字符串类型足够大,可以容纳所有这些,是 curl 无法处理吗?

这是我的代码

#include <cstdint>
#include <iostream>
#include <memory>
#include <string>
#include <json.hpp>
#include <curl/curl.h>

namespace
{
std::size_t callback(
const char* in,
std::size_t size,
std::size_t num,
std::string* out)
{
const std::size_t totalBytes(size * num);
out->append(in, totalBytes);
return totalBytes;
}
}

int main()
{
const std::string url("http://validate.jsontest.com/?json=%5BJSON-code-to-validate%5D");

CURL* curl = curl_easy_init();

// Set remote URL.
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());

// Don't bother trying IPv6, which would increase DNS resolution time.
curl_easy_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

// Don't wait forever, time out after 10 seconds.
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);

// Follow HTTP redirects if necessary.
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);

// Response information.
int httpCode(0);
std::unique_ptr<std::string> httpData(new std::string());

// Hook up data handling function.
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);

// Hook up data container (will be passed as the last parameter to the
// callback handling function). Can be any pointer type, since it will
// internally be passed as a void pointer.
curl_easy_setopt(curl, CURLOPT_WRITEDATA, httpData.get());

// Run our HTTP GET command, capture the HTTP response code, and clean up.
curl_easy_perform(curl);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpCode);
curl_easy_cleanup(curl);

std::cout << *httpData << std::endl;

return 0;
}

我已经查看了其他相关问题,但没有一个真正有帮助。

最佳答案

我认为这是由于 reddit.com API 的限制。这主要是由于 User-Agent header 引起的。有关更多信息,请阅读 https://github.com/reddit/reddit/wiki/API 的规则部分.

任何测试目的你都可以复制你的浏览器用户代理并像这样测试一次

curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36");

如果你想经常使用 api,你必须使用 OAuth2 来通过 reddit 授权你的应用程序。

关于c++ - 在 C++ 中使用 cURL 获取 JSON 文件,较大的文件没有出现或者可能太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42893964/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com