今天遇到一个问题,libcurl进行post请求,发现回传的数据少了一部分,导致服务回传的json数据不完整。
bug修复前
inline size_t callBackFun_(void *buffer, size_t size, size_t nmemb, void *userp)
{
static int current_index = 0;
int content_size = nmemb * size;
std::string result = std::string((char *)buffer, content_size);
LOG_DEBUG("------content_size---------" << content_size);
LOG_INFO(result);
return content_size;
}
void postImpl(){
curl_global_init(CURL_GLOBAL_ALL);
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callBackFun_);
}
上面代码发现,post请求后频繁出现打印的log, json数据不完整, 导致解析失败。
bug修复后
std::string global_result}; // 注意这里
//下面回调 json太长 会进入多次
inline size_t callBackFun_(void *buffer, size_t size, size_t nmemb, void *userp)
{
static int current_index = 0;
int content_size = nmemb * size;
std::string result = std::string((char *)buffer, content_size);
LOG_DEBUG("------content_size---------" << content_size);
global_result.append(result);
return content_size;
}
void postImpl(){
global_result.clear();
curl_global_init(CURL_GLOBAL_ALL);
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callBackFun_);
LOG_INFO(global_result);
}
以上是今天遇到的一个奇怪问题的解决方案。
网友评论