gpt4 book ai didi

C++ curl_easy_perform() 在响应中插入换行符

转载 作者:行者123 更新时间:2023-11-30 03:22:16 25 4
gpt4 key购买 nike

我使用以下代码片段从远程 REST API 获取 43182 个字符长的 JSON:

string result_;

curl_easy_setopt(curlGET_, CURLOPT_TIMEOUT, CURL_TIMEOUT);
curl_easy_setopt(curlGET_, CURLOPT_URL, url.c_str());
curl_easy_setopt(curlGET_, CURLOPT_VERBOSE, CURL_DEBUG_VERBOSE);
curl_easy_setopt(curlGET_, CURLOPT_WRITEDATA, &result_);
curl_easy_setopt(curlGET_, CURLOPT_WRITEFUNCTION, WriteCallback);

static size_t WriteCallback(void *response,
size_t size,
size_t nmemb,
void *userp) noexcept
{
(static_cast<string*>(userp))->append(static_cast<char*>(response));
return size * nmemb;
};

curlStatusCode_ = curl_easy_perform(curlGET_);

我在 result_ 中得到的是完整的 JSON,但在字符 31954 之后有换行符:

newline in JSON

如果我在浏览器或命令行 curl 中获取相同的 JSON,则没有换行符。如何针对“任意”长的 JSON 或其他通用响应解决此问题?

最佳答案

来自 CURL document写回调:

The data passed to this function will not be zero terminated!

responseWriteCallback不一定是空终止的。所以打电话append通过将其转换为 char*将调用未定义的行为。您也必须在 append 中传递数据量.

(static_cast<string*>(userp))->append(static_cast<char*>(response), size * nmemb)

关于C++ curl_easy_perform() 在响应中插入换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51282882/

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