int delete_by_time_range(const char* start, const char* stop, const char* predicate,
char* error_msg, size_t err_size) {
CURL *curl = curl_easy_init();
if (!curl) {
snprintf(error_msg, err_size, "CURL 初始化失败");
return 0;
}
char url[512];
snprintf(url, sizeof(url), "%s/api/v2/delete?bucket=%s&org=%s", HOST, BUCKET, ORG);
const char* pred_expr = predicate ? predicate : "_measurement=\"%s\"";
char json_payload[1024];
snprintf(json_payload, sizeof(json_payload),
"{\"start\": \"%s\", \"stop\": \"%s\", \"predicate\": \"%s\"}",
start, stop, pred_expr);
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Content-Type: application/json");
char auth_header[512];
snprintf(auth_header, sizeof(auth_header), "Authorization: Token %s", TOKEN);
headers = curl_slist_append(headers, auth_header);
struct MemoryStruct resp;
init_memory(&resp);
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_payload);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &resp);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30);
int success = 0;
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK) {
snprintf(error_msg, err_size, "Delete 请求失败: %s", curl_easy_strerror(res));
} else {
long status;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &status);
if (status == 204) {
success = 1;
} else {
snprintf(error_msg, err_size, "Delete 失败: HTTP %ld, 响应: %.200s", status, resp.memory);
}
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
free_memory(&resp);
return success;
}
以上代码执行时提示{"code":"invalid","message":"error decoding json body: invalid character 'l' after object key:value pair"}