c调用libcurl库发送GET 和 POST请求

2023-05-16

libcrul请求的基本套路流程

  • 1、调用curl_global_init()初始化libcurl
  • 2、调用curl_easy_init()函数得到 easy interface型指针
  • 3、调用curl_easy_setopt()设置传输选项
  • 4、根据curl_easy_setopt()设置的传输选项,实现回调函数以完成用户特定任务
  • 5、调用curl_easy_perform()函数完成传输任务
  • 6、调用curl_easy_cleanup()释放内存

过程中关键的是用curl_easy_setopt()设置参数

示例代码

GET

/*
参考POST代码
当不调用CURLOPT_POST,和CURLOPT_POSTFIELDS,默认使用GET方式
某些服务器只支持其中一种方式
*/

POST

struct MemoryStruct	
{		
    char *memory;		
    size_t size; 
};
static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb,	void *userp) 
{		
    size_t	realsize =	size * nmemb;		
    struct MemoryStruct *mem = (struct MemoryStruct *)userp;
	mem->memory	= realloc(mem->memory, mem->size + realsize	+ 1);		
    if(mem->memory	==	NULL)	
    {				
        /*	out	of	memory!	*/				
        printf("not enough memory (realloc returned NULL)\n");				
        return 0;
	}
	memcpy(&(mem->memory[mem->size]), contents,	realsize);		
    mem->size += realsize;		
    mem->memory[mem->size] = 0;
    
    int i=0;
    printf("\ncontents:");
    for(i=0;i<realsize;i++)
    {
        printf("%c",mem->memory[i]);
    }printf("\n");

	return realsize; 
}

/*
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' 'http://rdtest.myhiott.com:8490/xyStoryDeviceServer/signRecord?deviceid=1'
Request URL:
    http://rdtest.myhiott.com:8490/xyStoryDeviceServer/signRecord?deviceid=1
*/
int set_sign_record(char * device_id,char *msg)
{
    int ret = 0;
    int info = 0;
    CURL *curl;
    CURLcode res;
    struct curl_slist *headers=NULL; 
    char *url = "http://rdtest.myhiott.com:8490/xyStoryDeviceServer/signRecord?deviceid=";

    struct MemoryStruct chunk;
    chunk.memory = malloc(1);
    /* will be grown as needed by the realloc above */ 
    chunk.size = 0;
    /*no data at this point*/

    char *Request_URL = (char *) malloc(strlen(url) + strlen(device_id) + 1);
    strcpy(Request_URL, url);
    strcat(Request_URL, device_id);

     curl = curl_easy_init();
     if (curl)
     {
        headers = curl_slist_append(headers, "Content-Type: application/json");
        headers = curl_slist_append(headers, "Accept: application/json");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);//设置HTTP头
        curl_easy_setopt(curl, CURLOPT_URL, Request_URL);//设置post请求的url地址
        //curl_easy_setopt(curl, CURLOPT_TIMEOUT, 1);//设置发送超时时间
        curl_easy_setopt(curl,	CURLOPT_WRITEFUNCTION,	WriteMemoryCallback);
        curl_easy_setopt(curl,	CURLOPT_WRITEDATA,	(void	*)&chunk);
        curl_easy_setopt(curl,CURLOPT_POSTFIELDS,"");
        curl_easy_setopt(curl, CURLOPT_POST, 1); 
        curl_easy_setopt(curl,CURLOPT_VERBOSE,1);//打印调试信息

        res = curl_easy_perform(curl);
        curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE  , &info);
        if(res != CURLE_OK || info != 200)
        {
            ret = 1;
            printf( "!crul failed to perform url='%s' res=[%d] rcode=%d\n",Request_URL, res,info);
        }else{
            printf("%lu	bytes retrieved\n", (long)chunk.size);
        }
       // _get_post_msg(chunk.memory,msg);

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
     }else{
         ret = 2;
     }
    free(chunk.memory);
    free(Request_URL);
    return ret;
}

参考

https://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c调用libcurl库发送GET 和 POST请求 的相关文章

随机推荐

  • MFC计算机图形学(1)

    这学期上了计算机图形学 xff0c 用MFC来绘制简单的图形 下面就简单介绍一下用cv 43 43 来绘制图形 VC 43 43 安装 VC 43 43 我基本不用的 xff0c 平时写C C 43 43 的代码都用Code Blocks
  • MFC计算机图形学(2)

    这里呢 xff0c 先把上一讲的联系讲一下 一般人都用是一个一个的去画 xff0c 但是那样好麻烦 xff0c 计算机的有点就是容易处理重复的事情 xff0c 那就定义成一个画正方形函数吧 xff0c 每次调用就可以了 怎么自定义函数呢 x
  • MFC计算机图形学(3)

    之前我们已经可以画出直线和曲线了 但是算法虽容易理解 xff0c 但是复杂度高 xff0c 今天就介绍比较流行的DDA画线法 xff0c 还有 xff0c 对鼠标进行事件有所响应 xff0c 即 xff0c 在画板上 xff0c 鼠标左键单
  • Ubuntu18.04安装realsense viewer

    一 下载realsense安装包 mkdir p librealsense install cd librealsense install git clone b v2 31 0 https github com IntelRealSens
  • 用D435i录制自己的数据集运行ORBslam2并构建稠密点云

    一 录制rosbag 二 播放rosbag并用rviz查看topic xff0c 记下rgb和depth流话题名 三 用如下脚本 xff08 python2而不是3 xff09 保存rgb和depth图片同时生成rgb txt depth
  • Unrecoverable error: corrupted cluster config file.

    from https www cnblogs com topicjie p 7603227 html 缘起 正在欢乐的逗着孩子玩耍 xff0c 突然间来了一通电话 xff0c 值班人员告诉我误重启了一台服务器 xff0c 是我负责的服务 x
  • 树莓派3B+无屏幕和键盘配置树莓派WiFi和SSH

    前言 树莓派3B 43 安装系统Raspbian xff0c 默认的SSH是关闭的 xff0c 如何在无屏幕和键盘的情况下 xff0c 让笔记本通过WIFI访问树莓派 树莓派3B 43 发布后不久 xff0c 树莓派官方 Raspbian
  • ubuntu分区设置

    ubuntu分区设置 swap区 xff1a 逻辑分区 xff0c 虚拟内存类似 xff0c 大小和电脑内存一样大 xff1b boot区 xff1a 主分区 xff0c 引导系统的 xff0c 分配200M 500M xff0c 条件好些
  • 图像系统概述和名词解析

    图像系统组成 光源 xff08 包含人造光 自然光 闪光灯 xff09 照到物体上 xff0c 光线反射进入成像系统 xff0c 经过镜头 xff08 对于变焦镜头有驱动马达调整镜片位置 xff0c 实现变焦 xff09 光圈 滤光片 快门
  • 海思IQ图像清晰度调试策略

    总策略 影响清晰度的关键指标 xff1a 锐度 噪点和gamma Gamma调试步骤 YUVsharpen锐度调试 LDCI局部对比度调节 Dehaze调节 去雾算法主要用在有场景中做处理 xff0c 调整图像的对比度使更加清 去雾算法主要
  • 海思ISP曝光调整策略

    AE曝光调整 Exposure Attr 影响参数 xff1a ExpTimeRange Min Max 曝光时间Gain 各种增益控制Speed 曝光速度 xff08 影响到曝光收敛 xff0c AE闪烁 xff09 Compensati
  • ADS(ARM Developer Suite)安装与卸载中的问题(转)

    ADS用来对ARM的裸机代码进行编辑和调试 我在安装ADS1 2的过程中 xff0c 遇到了一个小问题 xff0c 写下来和大家分享一下解决方法 1 在安装程序 xff0c 进度条到100 时 xff0c 会一直停在那 xff0c 十几分钟
  • ucosIII 学习资料汇总

    网站 书籍 1 嵌入式实时操作系统uc OS III 邵贝贝译 这本书其实就是一本工具书 xff0c 我参考了官方的说明文档 xff0c 发现雷同很高 感觉就是官方说明文档翻译的 xff0c 用来应用查查接口还有点用 xff0c 不是十分推
  • USB协议传输结构

    USB作为数据通信标准 xff0c 固件可分为枚举配置和类协议部分 xff0c 枚举配置实现USB主机对设备的枚举和配置 xff0c 类协议实现设备各自的数据传输 usb2 0协议chapter8 protocol layer 1 USB协
  • 蓝牙HCI协议

    HCI 层位于蓝牙高层协议和低层协议之间 xff0c 提供了对基带控制器和链路管理器的命令以及访问蓝牙硬件的统一接口 它是我们实现自己的蓝牙设备要接触的第一个蓝牙协议 起着承上启下的作用 HCI通过包的方式来传送数据 命令和事件的 xff0
  • 标准USB设备请求命令

    一 标准的usb设备请求命令 控制传输是最重要和结构最复杂的一种传输类型 控制传输的 初始设置步骤 中包含了1 个8 字节的DATA0 数据包 参见图6 6 这8 字节的数据包是主机用来发送控制阶段中的请求命令的 而这些请求命令是主机配置U
  • 卡尔曼滤波基本公式推导(高斯乘积法)

    前言 卡尔曼滤波的推导这里给出两种推导方法 xff1a 一种是利用高斯乘积定理和贝叶斯公式推导出来 的 xff0c 另一种借用的是最小误差的思想 xff08 IMSE xff09 关于卡尔曼滤波的应用场景以及通俗的解释 xff0c 我相信各
  • 计算机组成原理(唐朔飞)

    计算机组成原理 唐朔飞 存储器 存储器分类 存储介质分类 半导体存储器磁表面存储器磁芯存储器 淘汰 存储方式 存储结构 存储器容量 地址总线 xff1a CPU能访问的地址宽度 xff0c 32地址线表示能访问2的32次方个存储单元地址 数
  • ubuntu配置静态IP、DNS地址

    虚拟机需要使用桥接上网 1 ifconfig 查看网卡信息 2 vi etc network interfaces 打开并编辑配置文件 配置说明 xff1a auto lo iface lo inet loopback auto ens33
  • c调用libcurl库发送GET 和 POST请求

    libcrul请求的基本套路流程 1 调用curl global init 初始化libcurl2 调用curl easy init 函数得到 easy interface型指针3 调用curl easy setopt 设置传输选项4 根据