既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
选项-http相关
libcurl 函数之 curl_easy_setopt 详细
官方API手册
1.CURLOPT_URL:设置访问URL(获取/放置的完整URL).
2.CURLOPT_WRITEFUNCTION、CURLOPT_WRITEDATA
CURLOPT_WRITEFUNCTION
:设定一个回调函数,执行libcurl在接受到数据后用户想进行的操作,通常函数多做数据保存的功能,如处理下载文件。
CURLOPT_WRITEDATA
:用于表明CURLOPT_WRITEFUNCTION
中的stream指针的来源,即:设定回调函数的第四个参数的数据类型。【若不写该函数则标准输出到屏幕上,若单使用该函数则使用默认回调函数将接受到数据简单标准输出】
回调函数原型为:size_t function( void *ptr, size_t size, size_t nmemb, void *stream)
【以fwrite()函数语法为准】
3.CURLOPT_HEADERFUNCTION
CURLOPT_HEADERFUNCTION
:设定一个回调函数,执行libcurl在接受到http头数据后用户想进行的操作。
CURLOPT_WRITEDATA
:用于表明CURLOPT_WRITEFUNCTION
中的stream指针的来源,即:设定回调函数的第四个参数的数据类型。【若不写该函数则标准输出到屏幕上,若单使用该函数则使用默认回调函数将接受到数据简单标准输出】
回调函数原型为:size_t function( void *ptr, size_t size, size_t nmemb, void *stream)
【以fwrite()函数语法为准】
4.CURLOPT_HEADERDATA
发送FILE *或void *存储头,如果你使用回调,它只是简单地传递回调未修改。
会直接输出到屏幕上。
5.CURLOPT_READFUNCTION、 CURLOPT_READDATA
CURLOPT_READFUNCTION
设定一个回调函数,读取数据传递给远程主机时将调用CURLOPT_READFUNCTION
指定的函数,函数原型是:size_t function(void *ptr, size_t size, size_t nmemb,void *stream)
【以fread()函数语法为准】
CURLOPT_READDATA
表明CURLOPT_READFUNCTION
函数原型中的stream指针来源,即:设定回调函数的第四个参数的数据类型。
6.CURLOPT_NOPROGRESS、CURLOPT_PROGRESSFUNCTION、CURLOPT_PROGRESSDATA
跟数据传输进度相关的参数。CURLOPT_PROGRESSFUNCTION
指定的函数正常情况下每秒被libcurl调用一次,为了使CURLOPT_PROGRESSFUNCTION
被调用,CURLOPT_NOPROGRESS
必须被设置为false
,CURLOPT_PROGRESSDATA
指定的参数将作为 CURLOPT_PROGRESSFUNCTION
指定函数的第一个参数
7.CURLOPT_TIMEOUT、
CURLOPT_CONNECTIONTIMEOUT
CURLOPT_TIMEOUT
用于设置传输时间.
CURLOPT_CONNECTIONTIMEOUT
设置连接等待时间
8.CURLOPT_FOLLOWLOCATION:设置重定位URL
CURLOPT_RESUME_FROM
:断点续传相关设置。
CURLOPT_RANGE
指定char *
参数传递给libcurl,用于指明http域的RANGE头域,例如:
表示头500个字节:bytes=0-499
表示第二个500字节:bytes=500-999
表示最后500个字节:bytes=-500
表示500字节以后的范围:bytes=500-
第一个和最后一个字节:bytes=0-0,-1
同时指定几个范围:bytes=500-600,601-999
CURLOPT_RESUME_FROM
传递一个long参数给libcurl,指定你希望开始传递的偏移量。
9.CURLOPT_UPLOAD:
如果第三个参数被设置为1的话,就是让libcurl做好上传的准备。如果传输协议是http的话,uoload就是发送put。
10. CURLOPT_SSL_VERIFYPEER:
第三个参数的缺省值为1.该函数多用于设定curl忽略对网站证书的检查(不管忽略不忽略,curl都是检查的)。
11.CURLOPT_VERBOSE
相当厉害的一个参数,可以向控制台(默认)输出curl接受和发送的数据,输出流可以重定向。
12.CURLOPT_HTTPGET
将curl向服务器交互数据的方式改变为get
选项-http消息头
使用libcurl发送http请求时,会自动添加一些http头
可通过CURLOPT_HTTPHEADER
属性手动替换、添加或删除相应的HTTP消息头。
HTTP支持GET, HEAD或者POST提交请求。可以设置CURLOPT_CUSTOMREQUEST
来设置自定义的请求方式,libcurl默认以GET方式提交请求。
选项-http应答头
发出http请求后,服务器会返回应答头信息和应答数据,如果仅仅是打印应答头的所有内容,则直接可以通过curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, 打印函数)
的方式来完成,这里需要获取的是应答头中特定的信息,如:应答码、cookies列表等,则需使用函数:
CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );
info参数就是我们需要获取的内容,如:
1.CURLINFO_RESPONSE_CODE
:获取应答码
2.CURLINFO_HEADER_SIZE
:头大小
3.CURLINFO_COOKIELIST
:cookies列表
除了获取应答信息外,这个函数还能获取curl的一些内部信息,如请求时间、连接时间等等。
选项-http验证
在使用HTTP协议时,客户端有很多种方式向服务器提供验证信息。默认的 HTTP验证方法是"Basic”,它将用户名与密码以明文的方式、经Base64编码后保存在HTTP请求头中,发往服务器。当然这不太安全。
当前版本的libcurl支持的验证方法有:basic, Digest, NTLM, Negotiate, GSS-Negotiate and SPNEGO。
可通过CURLOPT_HTTPAUTH
属性来设置具体的验证方式:
curl_easy_setopt(easy_handle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
向代理服务器发送验证信息时,可以通过
CURLOPT_PROXYAUTH设置验证方式:   curl_easy_setopt(easy_handle, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
也可同时设置多种验证方式(通过按位与),使用‘CURLAUTH_ANY‘将允许libcurl可以选择任何它所支持的验证方式。通过CURLOPT_HTTPAUTH
或 CURLOPT_PROXYAUTH
属性设置的多种验证方式,libcurl会在运行时选择一种它认为是最好的方式与服务器通信:
curl_easy_setopt(easy_handle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST|CURLAUTH_BASIC);
// curl_easy_setopt(easy_handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_easy_perform()
函数原型:CURLcode curl_easy_perform(struct Curl_easy *data)
函数功能:执行前面设置的阻塞传输的外部接口。
函数位置:easy.c
参数:CURL的指针(句柄)
返回值:CURLcode
变量:curl的状态
1.CURLE_OK //任务完成一切都好
2.CURLE_UNSUPPORTED_PROTOCOL //不支持的协议,由URL的头部指定
3.CURLE_COULDNT_CONNECT //不能连接到remote 主机或者代理
4.CURLE_REMOTE_ACCESS_DENIED //访问被拒绝
5.CURLE_HTTP_RETURNED_ERROR //Http返回错误
6.CURLE_READ_ERROR //读本地文件错误
NOTE:
在初始化CURL类型的指针 以及curl_easy_setop()
t完成后调用. 即:完成curl_easy_setopt指定的所有选项(执行curl的各种操作),并且通过分析其返回值,可以判断curl执行的情况。
curl_easy_cleanup()
函数原型:void curl_easy_cleanup(struct Curl_easy *data)
函数功能:清除/释放给定简单句柄的外部接口。(结束一个会话)
函数位置:easy.c
参数:CURL的指针(句柄)
返回值:无
NOTE:
与curl_easy_init
配合着用.
curl_global_cleanup()
函数原型:void curl_global_cleanup(void)
函数功能:全局清理curl,使用“init_flags”的值来确定哪些需要清理,哪些不需要。【init_flags为easy.c中的全局变量】
函数位置:easy.c
参数:无
返回值:无
curl_version()
函数原型:char *curl_version(void)
函数功能: 返回libcurl库的版本的字符串。
函数位置:version.c
参数:无
返回值:版本字符串
curl_easy_getinfo()
函数原型:CURLcode curl_easy_getinfo(struct Curl_easy *data, CURLINFO info, ...)
函数功能:外部接口,允许应用程序从执行的传输和类似操作中检索信息。
函数位置:easy.c
参数:
1.struct Curl_easy
:CURL的指针(句柄)
2.选项:URLINFO_RESPONSE_CODE
:获得http返回的状态码,如400,200。
返回值:CURLcode
变量:curl的状态
NOTE:
curl_getate()
函数原型:
函数功能:将日期字符串转换为Time_t
函数位置:
参数:
返回值:
NOTE:
curl_easegetinfo()
函数原型:
函数功能:获取有关已执行的传输的信息
函数位置:
参数:
返回值:
NOTE:
curl_formadd()
函数原型:
函数功能:帮助构建HTTP表单POST
函数位置:
参数:
返回值:
NOTE:
curl_formfree()
函数原型:
函数功能:释放一个用卷曲形
函数位置:
参数:
返回值:
NOTE:
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)