基于llibcurl库做基本http GET/POST操作代码demo

2023-05-16

libcurl库详细解说请欣赏:https://www.cnblogs.com/xietianjiao/p/13260021.html

libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。

基于libcurl 库代码demo:

GET 操作

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

#define true 1
#define false 0
typedef unsigned int bool;

size_t readData( void *ptr, size_t size, size_t nmemb, void *stream)
{
	char buf[10240] = {'\0'};
	
	strncpy(buf,ptr,10240);

	printf("==================== get data ====================\n");
	printf("%s\n",buf);
}	

bool getUrl(char *filename)
{
	CURL *curl;
	CURLcode res;
	FILE *fp;
	if ((fp = fopen(filename, "w")) == NULL)  // 返回结果用文件存储
		return false;
	struct curl_slist *headers = NULL;
	headers = curl_slist_append(headers, "Accept: Agent-007");
	curl = curl_easy_init();    // 初始化
	if (curl)
	{
		//curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");// 代理
		curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);// 改协议头
		curl_easy_setopt(curl, CURLOPT_URL,"http://www.baidu.com");
		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, readData); //将返回的http所有内容输出到readData这个回调函数
	//	curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); //将返回的http头输出到fp指向的文件
	//	curl_easy_setopt(curl, CURLOPT_HEADERDATA, fp); //将返回的html主体数据输出到fp指向的文件
		res = curl_easy_perform(curl);   // 执行
		if (res != 0) {

			curl_slist_free_all(headers);
			curl_easy_cleanup(curl);
		}
		fclose(fp);
		return true;
	}
}

int main(void)
{
	getUrl("/tmp/post.html");
}

POST 操作

首先要:编译openssl支持libcurl的https访问(OpenSSL是一个软件包,用于支持SSL传输协议的软件包。),post的https的访问是加密访问,SSL安全套接层。用于保障通讯的安全。主要任务是提供私密性,信息完整性和身份认证

基于翔云人工智能平台,人脸识别:

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

#define true 1
#define false 0
typedef unsigned int bool;

size_t readData( void *ptr, size_t size, size_t nmemb, void *stream)
{
	char buf[1024] = {'\0'};
	
	strncpy(buf,ptr,1024);

	printf("==================== get data ====================\n");
	printf("%s\n",buf);
}	


bool postUrl()
{
	CURL *curl;
	CURLcode res;
	char *postString;

	char img1[12];
	char img2[12];
	char *key = "6mTEHpntuqTroagVqReJRD";
	char *secret = "36603c3db2a14ed9a6f5f70c10de80d7";
	int typeId = 21;
	char *format = "xml";

	postString = (char *)malloc(strlen(key)+strlen(secret)+2048);

	sprintf(postString,"&img1=%s$img2=%s&key=%s&secret=%s&typeId=%d&format=%s",  //post内容的拼接
			"","",key,secret,21,format);

	curl = curl_easy_init();
	if (curl)
	{
		curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件
		curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postString);    // 指定post内容,用$符号拼接
		curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do");   // 指定url
		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, readData); //将返回的http头输出到fp指向的文件
		res = curl_easy_perform(curl);
		printf("ok = %d\n",res);

		curl_easy_cleanup(curl);
	}
	return true;
}

int main(void)
{
	postUrl();
}

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

基于llibcurl库做基本http GET/POST操作代码demo 的相关文章

随机推荐

  • C buffer

    这学期在Dartmouth上ENGS20 Introduction to Scientific Computing xff0c 好多东西不记下来就会忘 xff0c 所以开一个笔记 在C语言中 xff0c 输入和输出都是有buffer的 xf
  • 寄存器值的操作方法

    通过这段时间的工作和学习 xff0c 我感觉在嵌入式硬件编程中 xff0c 大多数情况下都是对相应硬件的功能寄存器进行设置和操作 一 寄存器的设置和操作特性 1 xff0c 一个寄存器的每个位有其不同的意义 xff0c 进行不同的设置会使硬
  • UART串口通信(回环测试)

    一 UART串口通信简介 UART xff08 Universal Asynchronous Receiver Transmitter xff09 是采用异步串行通信方式的通用异步收发传输器 xff0c 在发送数据时将并行数据转换为串行数据
  • extern "C"的作用

    extern 34 C 34 的作用 一 前些天 编程序是用到了很久以前写的C程序 想把里面的函数利用起来 连接发现出现了找不到具体函数的错误 以下是假设旧的C程序库 C的头文件 c h ifndef C H define C H exte
  • 输入分钟数,按小时和分钟输出

    copyright C 2014 2015 Lighting Studio Co Ltd File name xff1a Author xff1a Jerey Jobs Version 0 1 Date Description xff1a
  • 输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果

    程序要求 xff1a 输入一个32位的整数a 使用按位异或 运算 生成一个新的32位整数b 使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果 copyright C 2014 2015 Lighting Studio C
  • sqlite回调函数的解释与使用

    gt 在sqlite3的api函数中有一个sqlite3 exec xff0c 用来执行sql语句 xff1a 函数原型 xff1a int sqlite3 exec sqlite3 ppDb An open database const
  • Linux节点理解

    一 inode是什么 xff1f 理解inode xff0c 要从文件储存说起 文件储存在硬盘上 xff0c 硬盘的最小存储单位叫做 扇区 xff08 Sector xff09 每个扇区储存512字节 xff08 相当于0 5KB xff0
  • OSSempend();OSSemPost();函数的解析

    浅析 COS II v2 span class hljs number 85 span 内核OSSemPend 和OSSemPost 函数工作原理 文章来源 http span class hljs comment gliethttp cu
  • 矩阵键盘时钟

    span class hljs preprocessor include lt reg52 h gt span class hljs comment 包含头文件 xff0c 一般情况不需要改动 xff0c 头文件包含特殊功能寄存器的定义 s
  • opencv上gpu版surf特征点与orb特征点提取及匹配实例

    一 前言 本文主要实现了使用opencv里的gpu版surf特征检测器和gpu版orb检测器 xff0c 分别对图片进行特征点提取及匹配 xff0c 并对寻获的特征点进行了距离筛选 xff0c 将匹配较为好的特征点进行展示 二 实现代码 我
  • while(c = getchar() != '\n')和while((c = getchar()) != '\n')区别

    在利用while循环和getchar 读取缓存中的数据时 xff0c 发现了一些问题 在最初 xff0c 我利用while c 61 getchar 61 n 的时候 xff0c 发现总是不能将我想要读取的值正确的赋值给c xff0c 在我
  • C++template模板

    模板 xff08 Template xff09 指C 43 43 程序设计设计语言中采用类型作为参数的程序设计 xff0c 支持通用程序设计 C 43 43 的标准库提供许多有用的函数大多结合了模板的观念 xff0c 如STL以及IO St
  • Linux Ubuntu 14.04平台下安装EDK2

    Linux Ubuntu 14 04平台下安装EDK2 博客是基于https github com tianocore tianocore github io wiki Common instructions和 UEFI原理和编程 完成的
  • ubuntu下安装和使用

    在ubuntu下完善代码的时候 会遇到想要跳转到函数定义处 或者跳转到其他相关文件的情况下 此时要借助linux下的ctags工具 在这里 xff0c 我会尽我所能细致地讲清楚如何把vim变成source insight 然而你仍然需要积极
  • STM32 嵌入式系统开发分层设计思想简谈

    简介 开始之前自我介绍一下 xff0c 我在大学学的是物联网工程专业 xff0c 可惜的是发现嵌入式并不好找工作 于是后面自学了前端 xff0c 并到美团从事了1年相关的开发工作 xff0c 但是发现嵌入式才是真爱 xff0c 于是又转到嵌
  • 基于51单片机的智能导盲杖语音播报积水检测温度提示灯光照明proteus仿真原理图

    功能介绍 xff1a 0 本系统采用STC89C52作为单片机 1 导盲仗的上部和底部分别设置超声波传感器 xff0c 利用超声波测距原理分别测得盲人面部和脚底离障碍物的距离 xff0c 并将障碍信息通过语音播报传递给盲人 2 导盲杖设有光
  • 我是如何在2个小时用智能CCD图像检测系统实现一个零件的自动分选项目

    项目实例完整代码可以下载Examples xff1a https pan baidu com s 1YPjR TPJYLmriXNVnNbgZg 提取码 xff1a 52ai 有一种水表的塑料齿轮 xff0c 是有注塑机大批量生产出来 xf
  • keil找不到芯片型号的解决方法

    1 上官网下载对应的固件包 http www keil com dd2 Pack eula container 例如 2 点击 Pack installer 3 点击 File gt Import xff0c 选中下载的固件包 如果选择后左
  • 基于llibcurl库做基本http GET/POST操作代码demo

    libcurl库详细解说请欣赏 xff1a https www cnblogs com xietianjiao p 13260021 html libcurl是一个跨平台的网络协议库 xff0c 支持http https ftp gophe