简单说明libcurl的使用

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_50438937/article/details/113774149