Как разместить данные, включая разрыв строки с помощью libcurl (для Influxdb)? - PullRequest
1 голос
/ 08 мая 2019

Я отправляю точки данных в InfluxDB, используя libcurl в C ++.Одиночные точки данных работают, но для нескольких точек я борюсь за необходимый разрыв строки (\ n), как определено в InfluxDB HTTP API :

Напишите несколько точек длябаза данных с одним запросом, разделяя каждую точку новой строкой.

Запись точек из файла с флагом @.Файл должен содержать пакет точек в формате Line Protocol.Отдельные точки должны быть на отдельной строке и разделены символами новой строки (\ n).Файлы, содержащие возврат каретки, вызовут ошибки синтаксического анализатора.

Я думаю, это может быть проблема с форматированием символа, но я не могу понять, почему?Следующий код просто записывает 5 в расстоянии, но должен записать оба расстояния.

#include "stdafx.h"
#include "tchar.h"
#include <string>
#include <curl\curl.h>
#include <sstream>

int main()
{
    int dataPoints[] = { 3, 5 };
    std::string fieldIdentifier = "distance";

    std::stringstream ss;

    for (int i = 0; i < 1; i++) {
        ss << "aufbau1,ort=halle ";
        ss << fieldIdentifier;
        ss << "=" << dataPoints[i];
        ss << std::endl; //I guess this is the problem, it adds \n
    }

    ss << "aufbau1,ort=halle ";
    ss << fieldIdentifier;
    ss << "=" << dataPoints[1];

    std::string data = ss.str();
    const char *dataChar = data.c_str();

    CURL *curl;
    CURLcode res;
    curl_global_init(CURL_GLOBAL_ALL);
    curl = curl_easy_init();

    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "http://myIP:8086/write?db=testdb&u=myUser&p=myPwd");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, dataChar);
        res = curl_easy_perform(curl);

        /* Check for errors */
        if (res != CURLE_OK)
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
                curl_easy_strerror(res));

        curl_easy_cleanup(curl);
    }
    return 0;
}
...