如何在c ++中使用libcurl将POST发送到elasticsearch

时间:2014-09-17 09:55:58

标签: c++ elasticsearch libcurl

有没有人知道使用带有libcurl的弹性搜索的确切语法?

#include <stdio.h>
#include <curl/curl.h>

int main(void)
{
   CURL *curl;
   CURLcode res;

   curl = curl_easy_init();

   curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:9200/bro-201409170900/http/ZinAvJ-ETT-mycy2jyRkdg/_update -d");
   curl_easy_setopt(curl, CURLOPT_POST, 1);
   curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"script\" : \"ctx._source.longitude += 3\"}");
   curl_easy_perform(curl);
   curl_easy_cleanup(curl);

   return 1;
}

此代码会更新经度参数,我不知道为什么。

1 个答案:

答案 0 :(得分:2)

不应在url中指定“-d”。命令行工具只是构建在libcurl之上。 如果您想查看post请求的c代码是什么样的,可以在命令行中使用libcurl选项。

示例:

curl localhost:9200/bro-201409170900/http/ZinAvJ-ETT-mycy2jyRkdg/… -d '{ "script" : "ctx._source.longitude += 2"}' --libcurl  output.c

一个简单的“C”实现看起来就像这些行

#include <stdio.h>
#include <curl/curl.h>

int main(void)
{
   CURL *curl;
   CURLcode res;
   char *postFields = "{\"script\" : \"ctx._source.longitude += 3\"}";

   curl = curl_easy_init();
   curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
   curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:9200/bro-201409170900/http/ZinAvJ-ETT-mycy2jyRkdg/_update");
   curl_easy_setopt(curl, CURLOPT_POST, 1);
   curl_easy_setopt(curl,CURLOPT_POSTFIELDS,postFields);
   curl_easy_setopt(curl,CURLOPT_POSTFIELDSIZE,strlen(postFields));
   res = curl_easy_perform(curl);
   curl_easy_cleanup(curl);

   return res;
}