C/C++中用libcurl进行http请求,向ES中插入数据

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

int Insert(long arg1, long arg2, long arg3, long arg4, const char* arg5)
{
    CURL *curl;
    CURLcode res;
    //const char* str = "{\"time\":\"1542852001\",\"total\":\"100\",\"in\":\"20\",\"out\":\"80\",\"interface\":\"eth0\"}";
    char str[100];
    char url[100] = "http://192.168.1.200:9200/index/type/";

    sprintf(str, "{\"time\":%ld,\"total\":%ld,\"in\":%ld,\"out\":%ld,\"interface\":\"%s\"}", arg1, arg2, arg3, arg4, arg5);

    curl_global_init(CURL_GLOBAL_ALL);
    curl = curl_easy_init();
    if(curl!=NULL)
    {
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, str);
        res = curl_easy_perform(curl);
        if(res != CURLE_OK)
            //fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
            ErrPrintf("bandwidth error");
        curl_easy_cleanup(curl);
    }

    curl_global_cleanup();

    return 0;
}

注:
1) curl_global_init(CURL_GLOBAL_ALL);
在curl_easy_init函数调用时还没调用,它讲由libcurl库自动调用,所以多线程下最好主动调用该函数以防止在线程中curl_easy_init时多次调用。

2) curl_global_cleanup()
虽然libcurl是线程安全的,但curl_global_cleanup是不能保证线程安全的,所以不要在每个线程中都调用curl_global_init,应该将该函数的调用放在主线程中。

参考:
C++ 用libcurl库进行http通讯网络编程

curl库中curl_easy_setopt函数详解

官方例子

c/c++调用libcurl库发送http请求的两种基本用法

原文地址:https://www.cnblogs.com/stellar/p/10118362.html

时间: 2024-12-25 07:09:08

C/C++中用libcurl进行http请求,向ES中插入数据的相关文章

Loadrunner在post请求的cookie中插入其它多个值

有一个商城,提交订单的时候,需要在post请求的cookie中set一个code码,便于防刷 1 tijiao() 2 { 3 4 lr_think_time(1); 5 6 web_reg_save_param("validcode", 7 "LB=validcode=", 8 "RB=;", 9 "Search=All", 10 LAST); 11 12 13 14 web_submit_data("toSubm

AGS中通过FeatureServer插入数据失败、插入数据在WMTS请求中无法显示以及version概念的讨论

1.背景 在多个项目中,当我方接口给其他部门人员使用时出现了插入数据失败或者插入的数据在WMTS请求中无法显示出来的问题.针对这些问题,我在这篇文章中,将详细描述造成以上问题的原因.在此WebGIS产品的前台和后台接口中,此插入数据核心部分均是FeatureServer请求.所以我们首先对FeatureSever服务做一个大致的了解. 2.FeatureServer服务的大致了解 2.1 FeatureServer服务提供的功能 FeatureServer服务可以提供如下几种服务: 我们可以得出

libcurl发起post请求时间延迟问题。except为空即可

最近在做团购酒店APP分享到qzone功能,使用libcurl访问qzone的分享cgi接口,酒店分享信息以POST方式传输,在测试的时候发现分享接口平均有2s的延迟,这延迟也太大了吧,于是乎问了空间的接口人,答曰:怎么可能,这个接口的平均调用时延是100-200ms,肯定是你的代码有问题.好吧,开始检查代码,使用strace -p跟踪系统调用,发现curl发送了两次请求,其中第一次请求的响应特别的慢,额,原来这个才是导致延迟的罪魁祸首,tcpdump之后发现curl发送的第一个请求包含一个Ex

EF5+MVC4系列(11)在主视图中用Html.RenderPartial来调用分部视图(ViewDate传值);在主视图中用ajax调用action并在action中return PartialView返回分部视图(return view 和return PartialView 的区别)

一:主视图中调用子视图 在没有使用母版页的主视图中(也就是设置了layout为null的视图中),使用 Html.RenderPartial  可以调用分部视图(只调用视图,不调用action),并且使用 ViewData 来从主Action里面传值到主视图,或者是分布视图 最后生成的html如下   二:在主视图中用ajax调用子action并在子action中使用return PartialView返回分布视图(return view 和return PartialView 的区别) 这种情

Ajax提高篇(3)在请求和响应中使用 XML(1)

XML 是编程中最常用的数据格式之一,对于异步应用程序中的服务器响应能够带来切实的好处.在Ajax中也不例外. Ajax 应用程序就表现在其核心对象所选的名称 -- XMLHttpRequest,这个名称不是很好,因为它并没有反映技术上的实际情况.换句话说,多数人之所以认为 XML 是 Ajax 的核心组成部分,仅仅是因为他们想当然地以为 XMLHttpRequest 对象在任何时候都使用 XML.但实情并非如此,本文第一部分给出了原因.实际上,您将看到在多数 Ajax 应用程序中 XML 很少

使用getJSON()异步请求服务器返回json格式数据

我们可以使用jquery的getJSON()方法请求服务器返回json格式数据: js代码: function test(){ $.getJSON("JsonServlet",function(result){ alert(result.name); }); } 服务器端servlet响应: @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletEx

echarts通过ajax向服务器发送post请求,servlet从数据库读取数据并返回前端

1.echarts的官网上的demo,都是直接写死的随机数据,没有和数据库的交互,所以就自己写了一下,ok,我们开始一步一步走一遍整个流程吧. 就以官网最简单的那个小demo来做修改吧.官网上的小demo的效果图如下:(很熟悉,有没有) 2.按照echarts的使用方法新建一个echarts.html文件.为ECharts准备一个具备大小(宽高)的Dom(讲的有点细,熟悉的朋友直接跳过) <!DOCTYPE html> <head> <meta charset="u

请求的那一条数据,

客户端:删除一条,索引不变, 服务器:向上弹出一条,然后实时查询,就错过了一条, count = 1,pageindex = pageindex * count,代表第几页,请求的是第 几条数据,也可以根据 数组里面有几条数据 就选择加载几条数据, if (isLoadOne) { [params setObject:@"1" forKey:@"count"]; [params setObject:[NSString stringWithFormat:@"

OpenLayers添加点【php请求MySQL数据库返回GeoJSON数据】

php请求MySQL数据库返回GeoJSON数据的实现方法请参见: http://www.cnblogs.com/marost/p/6234514.html OpenLayers[v3.19.1-dist]添加GeoJSON数据源图层 <!doctype html> <html lang="en"> <head> <link rel='stylesheet' href='ol.css'> <style> #map { heig