libcurl库浅析
先放上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);
结束整个处理流程之后调用此函数,清除整个环境,释放资源。
libcurl库浅析的更多相关文章
- C++ 用libcurl库进行http通讯网络编程
使用libcurl完成http通讯,很方便而且是线程安全,转载一篇比较好的入门文章 转载自 http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724 ...
- C++ 用libcurl库进行http通讯网络编程(转)
转载:http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三. ...
- Cocos2d-x移植到WindowsPhone8移植问题-libcurl库移植问题
在Cocos2d-x 3.x最新版本中提供了Windows Phone 8平台移植libcurl库所需要的头文件和库文件.但要在Windows Phone 8平台成功移植libcurl库还是很不容易, ...
- Cocos开发中Visual Studio下libcurl库开发环境设置
我们介绍一下win32中Visual Studio下libcurl库开发环境设置.Cocos2d-x引擎其实已经带有为Win32下访问libcurl库,Cocos2d-x 3.x中libcurl库文件 ...
- C++ 用libcurl库进行http通讯网络编程[转]
http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.cur ...
- C/C++ 用libcurl库进行http通讯网络编程
C/C++ 用libcurl库进行http通讯网络编程 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_p ...
- C语言 HTTP上传文件-利用libcurl库上传文件
原文 http://justwinit.cn/post/7626/ 通常情况下,一般很少使用C语言来直接上传文件,但是遇到使用C语言编程实现文件上传时,该怎么做呢? 借助开源的libcurl库,我们 ...
- C++ 用libcurl库进行http 网络通讯编程
一.LibCurl基本编程框架libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议.libcur ...
- HTTP多线程下载+断点续传(libcurl库)
目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_perform 函数说明(error 状态码) 五.lib ...
随机推荐
- 多线程-等待(Wait)和通知(notify)
1.为了支撑多线程之间的协作,JDK提供了两个非常重要的线程接口:等待wait()方法和通知notify()方法. 这两个方法并不是在Thread类中的,而是输出在Object类.这意味着任何对象都可 ...
- 在Debian/Ubuntu上面安装升级nginx到最新版
在Debian下面通过 apt-get 可以自动安装 nginx,不过版本一般比较老,如果想要使用nginx的最新特性就需要升级版本. 一般安装可以通过编绎源文件安装,但可能需要安装很多编绎工具, ...
- (C#)WPF:Property和Attribute的区别
在C#里Property是属性,Attribute是特性.它们的概念是不一样的,充其量就是中文的神翻译问题. 1)属性是指类体里用get或set封装好的属性.属性是面向对象的理论范畴.比如说一个盒子, ...
- sparkContext初始化机制
sparkContext初始化机制 要点: 1.TaskSchedular如何注册,application.Excutor 如何反向注册 TaskScheduleImpl 即 TaskSchedula ...
- nyoj 217-a letter and a number (char)
217-a letter and a number 内存限制:64MB 时间限制:3000ms 特判: No 通过数:4 提交数:5 难度:1 题目描述: we define f(A) = 1, f( ...
- 《JAVA 程序员面试宝典(第四版)》之传递与引用篇
废话开场白 这个周末突然很想创业,为什么呢?原因很简单,我周围的同学或者说玩的比较好的朋友都发达了,前一个月和一个两年前还睡在一张床上的朋友,他现在已经在深圳买房买车了,没错是在深圳买 ...
- 反汇编分析NSString,你印象中的NSString是这样吗
我们先来定义三个NSString -(void) testNSString { NSString* a = @"abc"; NSString* b = [NSString stri ...
- 2C 还是 2B,跟找工作有什么关系?
通常,我们会把公司的业务类型分成以下几种: 2C,to Customer,指面向个人客户的业务,即将公司的产品或服务销售给个人,通常做出购买决策的个人也是使用产品或服务的用户.举例说明,像 BAT 发 ...
- js对象的sessionStorage,判断对象相等,判断是否包含某属性
一,storage storage只能存储字符串的数据,对于JS中常用的数组或对象却不能直接存储 因此需要借JSON进行类型转化来存储: let obj = { name:'Jim' } sessio ...
- PHP数组具有的特性有哪些
PHP 的数组是一种非常强大灵活的数据类型.以下是PHP数组具有的一些特性: 1.可以使用数字或字符串作为数组键值 1 $arr = [1 => 'ok', 'one' => 'hello ...