libcurl

libcurl简介:

libcurl是一个跨平台的网络协议库,支持http,ftp,https等协议。同样支持https证书授权,http post。http put,ftp上传,http基本表单上传,代理,cookie和用户认证。

在基于libcurl的程序里,主要采用callback function的形式完成传输任务,用户在启动传输前设置好各类参数和回掉函数,当满足条件时libcurl将调用用户的回掉函数实现特定功能。

下面是利用libcurl完成传输任务的流程:

1.  调用curl_global_init()初始化libcurl

2.  调用curl_easy_init()函数得到easy  interface 型指针

3.  调用curl_easy_setopt()设置传输选项

4.  根据curl_easy_setopt()设置的传输选项,实现回调函数以完成用户特定任务

5.  调用curl_easy_perform()函数完成传输任务

6.  调用curl_easy_cleanup()释放内存

在整个过程中设置curl_easy_setopt()参数是关键的,几乎所有的libcurl程序都要使用它。

=========================================

1). curl_global_init(long flags)这个函数在curl_global_cleanup()之前只能调用一次,如果此函数在curl_easy_init函数调用时候还没有被调用,它将由libcurl库自动调用,所以多线程下最好主动调用该函数以防止在线程中curl_easy_init()多次调用。

注意:虽然libcurl是线程安全的,但是curl_global_init是不能保证线程安全的,所以不要在每个线程中都调用curl_global_init,应该将该函数调用放在主线程中。

参数:flags

CURL_GLOBAL_ALL      // 初始化所有的可能的调用

CURL_GLOBAL_SSL      // 初始化支持安全套接字

CURL_GLOBAL_WIN32    // 初始化win32套接字库

CURL_GLOBAL_NOTHIONG  //  没有额外的初始化

2). curl_global_cleanup(void)

在结束libcurl使用的时候,用来对curl_global_init做的清理工作。

注意:虽然libcur是线程安全的,但是curl_global_cleanup()是不嫩保证线程安全的,所以不要在每个线程中都调用curl_global_init(),应该将该函数的调用放到主线程当中。

3).  curl_easy_init();

描述:curl_easy_init用来初始化一个CURL的指针(有些像返回FILE类型的指针一样)。相应的在调用结束时候要用curl_easy_cleanup()函数清理。一般curl_easy_init意味着一个会话的开始,它会返回一个easy_handle(CURL *对象),一般都用在easy系列的函数中。

4).  curl_easy_cleanup(CURL *handle);

描述:这个调用用来结束一个会话,与curl_easy_init()配合着使用。

参数: CURL类型的指针。

5).CURLcode curl_easy_setopt(CURLcode *handle, CURLcode option,parameter);

描述:这个函数最重要了,几乎所有的curl程序都要频繁的使用它。它告诉curl库,程序将有如何的行为,比如要查看一个网页的html代码等。(这个函数有些像ioctl函数)。

参数:

    a.  CURL类型的指针; 

    b.  各种CURLoption  类型的选项(都在curl.h里面有定义,man也可以查看)

    c.  parameter  这个参数既可以是个函数的指针,也可以是某个对象的指针,也可以是个long型的变量,它用什么这取决于第二个参数。CURLoption这个参数的取值很多,具体的可以查看man手册。

6).  curl_easy_perform(CURL *handle);

描述:这个函数在初始化CURL类型的指针以及curl_easy_setopt完成后调用,就像字面的意思所说的perform就像是个舞台。让我们设置的option运作起来。

参数:

CURL类型的指针。

=========================================

三. curl_easy_setopt函数部分选项介绍

本节主要介绍curl_easy_setopt中跟http相关的参数。该函数是curl中非常重要的函数。curl所有设置都是在该函数中完成的。该函数的设置选项众多,注意本节的阐述的只是部分常见选项。

1. CURLOPT_URL

设置访问URL

2. 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属性给默认回调哈桑农户传递一个已经打开的文件指针,用于将数据输出到文件里。

你可能感兴趣的:(libcurl)