网络发展得很快,越来越多网络传送协议出现,不管是什么样的开发人员面对这些协议都是比较困难的工作,往往在一个程序里就有多种不同协议的需求。像
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()来做清除的工作了。