libcurl库浅析
2024-10-06 23:23:02
先放上libcurl官方文档:链接
第一步:全局初始化
#include <curl/curl.h>
CURLcode curl_global_init(long flags );
在使用libcurl库的时候需要运行上面的函数生成所需要的环境。这个函数在整个程序进程当中只能运行一次。相对应的是curl_global_cleanup :用来清除环境。常用的falgs为下面几个。
- CURL_GLOBAL_ALL:初始化所有条件,建议使用这个默认值
- CURL_GLOBAL_SSL:初始化 SSL相关条件
- CURL_GLOBAL_WIN32 :初始化 Win32 socket 库
更多的可以参考官方技术文档。
第二步:创建单个句柄
此处为了简单选用easy接口为例,对于multi接口也类似,详细可以查看官方技术文档。
如果你只是需要使用默认参数只需要执行下面的函数
easyhandle = curl_easy_init();
如果需要修改里面的参数可以利用curl_easy_setopt 函数自定义生成自己的句柄。以http请求为例(其他例如FTP、TFTP、SMTP等见官方文档)例如:
curl_easy_setopt(*easyhandle,CURLOPT_POST,1L);//设置利用http的方法为post
curl_easy_setopt(*easyhandle,CURLOPT_POSTFIELDS,*send_buf);//设置需要发送的数据,send_buf里面存放了需要发送的数据。数据格式需要为网站能够解析的格式,因为libcurl不会编解码数据。
curl_easy_setopt(*easyhandle,CURLOPT_TIMEOUT,TIME——OUT);//用于设置传输时间
curl_easy_setopt(*easyhandle,CURLOPT_URL,URL);//设置利用http请求链接
上面的参数根据自己需要设置,下面是http一些其他参数的意思:
- CURLOPT_WRITEFUNCTION,CURLOPT_WRITEDATA:通过设定一个回调函数,执行libcurl在接受到数据后用户想进行的操作,通常函数多做数据保存的功能,如处理下载文件。
- CURLOPT_WRITEDATA 用于表明CURLOPT_WRITEFUNCTION函数中的stream指针的来源,说白了就是设定回调函数的第四个参数的数据类型。回调函数原型为:size_t function( void *ptr, size_t size, size_t nmemb, void *stream);
- CURLOPT_UPLOAD:就是让libcurl做好上传的准备。如果传输协议是http的话,uoload就是发送put。
- CURLOPT_SSL_VERIFYPEER:该函数多用于设定curl忽略对网站证书的检查(不管忽略不忽略,curl都是检查的)。
- CURLOPT_HTTPGET: 将curl向服务器交互数据的方式改变为get
第三步: 连接远程网站
success = curl_easy_perform(easyhandle);
第四步: 获取返回数据
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );
第五步: 结束单个句柄处理
#include <curl/curl.h>
void curl_easy_cleanup(CURL * handle );
步骤二到步骤五为一个链接处理过程,整个程序当中可以设置成循环执行步骤二到步骤五来处理多个链接。
第六步: 结束整个处理
#include <curl/curl.h>
void curl_global_cleanup(void);
结束整个处理流程之后调用此函数,清除整个环境,释放资源。
最新文章
- Android开发1:基本UI界面设计——布局和组件
- IBM
- SQL Server dbcc shrinkfile 不起作用
- kohana(3.2)和gleez(1.1.5)的安装
- Idea开发环境
- 【Hadoop】集群配置要点
- ado.net 参数传递之 in
- 启动tomcat时jmx port被占用
- python2.7练习小例子(三)
- redis的set类型!!!!
- Windows【端口被占用,杀死想啥的端口】
- js数据结构与算法——二叉树
- ACM常用STL
- python2.7安装
- C# FTPHelper工具类
- linux驱动编写(pwm驱动)【转】
- 201772020113李清华《面向对象程序设计(java)》第一周学习总结
- 写jsp文件时需要注意的一些小细节
- vue项目使用vue-photo-preview插件实现点击图片放大预览和移动
- mysql 5.6 binlog组提交实现原理(转载)