我正在使用以下代码段从远程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之后有换行符:
如果我在浏览器或命令行curl中获取相同的JSON,则没有换行符。如何为“任意”长的JSON或其他通用响应解决此问题?
答案 0 :(得分:2)
来自写回调的CURL document:
传递给该函数的数据不会被零终止!
WriteCallback
中的append
不一定为空终止。因此,仅将其强制转换为char*
来调用append
会调用未定义的行为。您也必须在(static_cast<string*>(userp))->append(static_cast<char*>(response), size * nmemb)
中传递数据量。
{{1}}