第二人生的源码分析(六十)多协议文件传送库libcurl的介绍
2023-09-14 09:10:41 时间
网络发展得很快,越来越多网络传送协议出现,不管是什么样的开发人员面对这些协议都是比较困难的工作,往往在一个程序里就有多种不同协议的需求。像
WEB流行的今天,如果没有使用HTTP协议好像已经很落后了。当然是HTTP协议比较流行和通用,只要能上网,就能传送数据,这种环境对于应用程序的适用性真是太好了。虽然HTTP协议是比较简单的,但让你从头来开发它,还是需要比较长的时间,那么有没有比较快速的方法呢?回答是肯定的,下面就介绍一个网络协议比较全,而又实用libcurl库。这个库实现的协议有FTP、FTPS、HTTP、HTTPS、SCP、SFTP、TFTP、TELNET、DICT、LDAP、LDAPS和FILE等协议,并且还支持SSL认证,HTTP POST,HTTP PUT,FTP上传,HTTP上传,代理,COOKIES,用户密码,文件续传等功能。
libcurl库还是支持不同平台执行的库。比如
Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HPUX, IRIX, AIX, Tru64, Linux, UnixWare, HURD, Windows, Amiga, OS/2, BeOs, Mac OS X, Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS
等等。
下面开始学习怎么样使用
libcurl库来构造一个简单的网络客户端程序。
首先调用函数
curl_global_init()函数来初始化库函数,但这个函数参数传入去,参数如下:
CURL_GLOBAL_WIN32 这个是初始化
WIN32平台的内容。
CURL_GLOBAL_SSL 这个是初始化
SSL的功能。
还有一个宏是
CURL_GLOBAL_ALL,它是上面两个值的组合。
其实,调用函数
curl_easy_init()来初始化一个句柄,调用如下:
easyhandle = curl_easy_init();
接着,再调用函数
curl_easy_setopt来设置网络地址。如下:
curl_easy_setopt(handle, CURLOPT_URL, "http://domain.com/");
这样就可设置好网络地址,那么返回来的数据是怎么样传给客户的应用程序的呢?原来是这样的,先自己写一个回调函数,然后把这个回调函数设置到
libcurl库里,再指定是什么的数据格式接收,当libcurl库返回数据时就会回调设置的函数。如下:
定义回调函数:
size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp);
设置回调函数:
curl_easy_setopt(easyhandle, CURLOPT_WRITEFUNCTION, write_data);
设置回调函数接收的数据格式:
curl_easy_setopt(easyhandle, CURLOPT_WRITEDATA, &internal_struct);
通过上面设置,就可以接收数据到回调函数里面了,那么又是怎么样指挥
libcurl库启动去下载数据或者上传数据的呢?下面就介绍函数curl_easy_perform,这个函数就是连接远程的网站,开始做协议相关的命令操作,调用的例子如下:
success = curl_easy_perform(easyhandle);
通过上面一系列的调用,就可以与
HTTP服务器连接,并且下载相应的数据,并传到回调函数里。当使用完这个库之后,不要忘记调用函数curl_global_cleanup()来做清除的工作了。
相关文章
- 从recat源码角度看setState流程
- 【说站】校园失物招领小程序源码 可作毕业设计
- php源码审计_静态代码审计
- selenium源码通读·11 |webdriver/common/touch_actions.py-TouchActions类分析
- 在线算命网站源码|算命小程序源码带uniapp
- apache-incubator-streampark源码编译本地运行
- Python 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)详解编程语言
- 分析Linux 协议栈:深入源码分析(linux协议栈源码)
- Linux源码开发:让你轻松深入了解(linux源码开发)
- 深入研究Linux Top源码(linux top 源码)
- Linux操作系统的源码与探索之路(linux源是什么)
- 解读破解Redis从源码中理解缓存组件(缓存组件redis源码)
- MySQL安装指南源码安装步骤详解(mysql下源码安装)