先放上libcurl官方文档:链接

第一步:全局初始化

#include <curl/curl.h>
CURLcode curl_global_init(long flags );

在使用libcurl库的时候需要运行上面的函数生成所需要的环境。这个函数在整个程序进程当中只能运行一次。相对应的是curl_global_cleanup :用来清除环境。常用的falgs为下面几个。

  1. CURL_GLOBAL_ALL:初始化所有条件,建议使用这个默认值
  2. CURL_GLOBAL_SSL:初始化 SSL相关条件
  3. 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一些其他参数的意思:

  1. CURLOPT_WRITEFUNCTION,CURLOPT_WRITEDATA:通过设定一个回调函数,执行libcurl在接受到数据后用户想进行的操作,通常函数多做数据保存的功能,如处理下载文件。
  2. CURLOPT_WRITEDATA 用于表明CURLOPT_WRITEFUNCTION函数中的stream指针的来源,说白了就是设定回调函数的第四个参数的数据类型。回调函数原型为:size_t function( void *ptr, size_t size, size_t nmemb, void *stream);
  3. CURLOPT_UPLOAD:就是让libcurl做好上传的准备。如果传输协议是http的话,uoload就是发送put。
  4. CURLOPT_SSL_VERIFYPEER:该函数多用于设定curl忽略对网站证书的检查(不管忽略不忽略,curl都是检查的)。
  5. 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);

结束整个处理流程之后调用此函数,清除整个环境,释放资源。

最新文章

  1. Android开发1:基本UI界面设计——布局和组件
  2. IBM
  3. SQL Server dbcc shrinkfile 不起作用
  4. kohana(3.2)和gleez(1.1.5)的安装
  5. Idea开发环境
  6. 【Hadoop】集群配置要点
  7. ado.net 参数传递之 in
  8. 启动tomcat时jmx port被占用
  9. python2.7练习小例子(三)
  10. redis的set类型!!!!
  11. Windows【端口被占用,杀死想啥的端口】
  12. js数据结构与算法——二叉树
  13. ACM常用STL
  14. python2.7安装
  15. C# FTPHelper工具类
  16. linux驱动编写(pwm驱动)【转】
  17. 201772020113李清华《面向对象程序设计(java)》第一周学习总结
  18. 写jsp文件时需要注意的一些小细节
  19. vue项目使用vue-photo-preview插件实现点击图片放大预览和移动
  20. mysql 5.6 binlog组提交实现原理(转载)

热门文章

  1. phpexcel导出数字带E的解决方法
  2. docker swarm 过滤器affinity 限制副本不会出现在同一个节点上
  3. PHP中高级面试题 一个高频面试题:怎么保证缓存与数据库的双写一致性?
  4. PHP 富文本解码为 HTML 并显示
  5. 关于GC(中):Java垃圾回收相关基础知识
  6. 力扣(LeetCode)键盘行 个人题解
  7. thinking in JAVA 编译记录
  8. element 时间限制 结束时间大于开始时间 数组形式
  9. vue 学习 渲染、v-指令
  10. pyinstaller打包python文件成exe(原理.安装.问题)