libcurl的安装
可以参考这个博文中其中的内容:安装libcurl
libcurl使用函数的一般步骤(忽略参数)
1、curl_global_init()
2、curl_easy_init()
3、curl_easy_setopt()
4、curl_easy_perform()
5、curl_easy_cleanup()
6、curl_global_cleanup()
libcurl函数的简单说明
1、CURLcode curl_global_init(long flags):初始化libcurl
若不调用,则其会在你调用curl_easy_init()函数的时候帮你自动调用。
由于curl_global_init()无法保证线程的安全,所以最好在开启线程前自行调用
参数:
flags
1)CURL_GLOBAL_ALL: 初始化所有的可能的调用
2)CURL_GLOBAL_DEFAULT: 默认方式
3)CURL_GLOBAL_SSL: 支持安全套接字
4)CURL_GLOBAL_NOTHING: 没有额外的初始化
5) CURL_GLOBAL_WIN32: 初始化win32套接字库
2、CURL *curl_easy_init( ):得到 easy interface型指针(句柄)
意味着一个会话的开始;它会返回一个easy_handle(CURL*对象),一般都用在easy系列的函数中。
3、CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter):设置句柄,告诉curl库,程序将有如何的行为。比如要查看一个网页的html代码等
参数:
1) CURL类型的指针:即执行第二步得到的句柄
2 )各种CURLoption类型的选项.(都在curl.h库里有定义,man 也可以查看到)
3 )parameter: 既可以是个函数的指针,也可以是某个对象的指针,也可以是个long型的变量。它用什么取决于第二个参数
第二个参数部分常用的选项:
a)CURLOPT_URL: 设置访问URL
--------第三个参数为目标网址
b)CURLOPT_WRITEFUNCTION,CURLOPT_WRITEDATA
回调函数原型为:size_t function( void *ptr, size_t size, size_t nmemb, void *stream); 函数将在libcurl接收到数据后被调用,因此函数多做数据保存的功能,如处理下载文件。CURLOPT_WRITEDATA 用于表明CURLOPT_WRITEFUNCTION函数中的stream指针的来源。
如果你没有通过CURLOPT_WRITEFUNCTION属性给easy handle设置回调函数,libcurl会提供一个默认的回调函数,它只是简单的将接收到的数据打印到标准输出。你也可以通过 CURLOPT_WRITEDATA属性给默认回调函数传递一个已经打开的文件指针,用于将数据输出到文件里。
c)CURLOPT_HEADERFUNCTION,CURLOPT_HEADERDATA
回调函数原型为 size_t function( void *ptr, size_t size,size_t nmemb, void *stream); libcurl一旦接收到http 头部数据后将调用该函数。CURLOPT_WRITEDATA 传递指针给libcurl,该指针表明CURLOPT_HEADERFUNCTION 函数的stream指针的来源。
d)CURLOPT_READFUNCTION CURLOPT_READDATA
libCurl需要读取数据传递给远程主机时将调用CURLOPT_READFUNCTION指定的函数,函数原型是:size_t function(void *ptr, size_t size, size_t nmemb,void *stream). CURLOPT_READDATA 表明CURLOPT_READFUNCTION函数原型中的stream指针来源。
e)CURLOPT_POSTFIELDS:指定post内容,即设置传的参数
第三个参数为post的内容
4、CURLcode curl_easy_perform(CURL *handle)
使设置的句柄运作起来,即进行post或get请求
参数:第二步curl_easy_init( )返回来的句柄
5、void curl_easy_cleanup(CURL *handle);
用来结束一个会话。与curl_easy_init配合着用
6、curl_global_cleanup()
结束libcurl使用的时候,用来对curl_global_init做的工作清理。
libcurl函数的简单运用
使用http的get操作获得百度网页的代码
#include <stdio.h>
#include <curl/curl.h>
int getUrl(char *filename)
{
CURL *curl;
CURLcode res;
FILE *fp;
if ((fp = fopen(filename, "w")) == NULL) // 返回结果用文件存储
return 0;
curl = curl_easy_init(); // 初始化
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL,"http://www.baidu.com");
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); //将返回的http头输出到fp指向的文件
curl_easy_setopt(curl, CURLOPT_HEADERDATA, fp); //将返回的html主体数据输出到fp指向的文件
res = curl_easy_perform(curl); // 执行句柄
if (res != 0) {
curl_easy_cleanup(curl);
}
fclose(fp);
return 1;
}
}
int main()
{
getUrl("./getBaidu.html");
return 0;
}