修改环境变量
export LD_LIBRARY_PATH=要找到的链接库的地址
export LD_LIBRARY_PATH=./curl-7.71.1/_install/lib/
编译代码
gcc ceshi.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib -lcurl
在运行后再/tmp/get.html中可以看到百度的页面的代码
libcurl库的使用
调用curl_global_init()初始化libcurl
调用curl_easy_init()得到easy interface型指针
调用curl_easy_setopt()设置参数
根据curl_easy_setopt()设置的传输选项,实现回调函数以完成用户特定任务
调用curl_easy_perform()完成传输任务
调用curl_easy_cleanup()释放内存
curl_global_init()只能使用一次(在curl_easy_cleanup后还可以继续使用)
如果这个函数在curl_easy_init()之前没有使用他将会由lcurl自动调用使用所以为了防止在多线程中每个线程都调用curl_global_init()。
注意:在lcurl中的线程是安全的但在curl_global_init()是不安全的所以不要在每个线程都调用curl_global_init(),所以应该将他放在主线程中调用
curl_global_init(long flag)
flag
CURL_GLOBLA_ALL // 初始化所有可能的调用
CURL_GLOBLA_SSL //初始化支撑安全套接字层
CURL_GLOBLA_WIN32 //初始化win32套接字库 一般用不到
CURL_CLOBLA_NOTHING //没有额外的初始化
curl_easy_init()
curl_easy_init用来初始化一个CURL型的指针,响应的在curl_easy_cleanup函数清理,相当于一个会话的开始,
curl_easy_setop``
curl_easy_setopt(CURL *handler,CURLoption option,parameter);
``
这个函数最终几乎所有的curl的程序都是频繁的调用这个函数,他告诉curl这个程序将有如何的行为,比如查看一个html的代码
参数
curl类型的指针
各种CURLoption类型的选项(都在curl.h的库中,man也可以查到)
parameter既可以是一个函数指针,也可以是一个long型的变量,具体是什么要看第二个参数使用的什么
OPTION这个参数有很多,可以查看man手册
curl_easy_perform
请求http访问
本节主要介绍curl_easy_setopt中跟http相关的参数。该函数是curl中非常重要的函数,curl所有设置都是在该函数中完成的,该函数的设置选项众多,注意本节的阐述的只是部分常见选项。
CURLOPT_URL
设置访问URL
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属性给默认回调函数传递一个已经打开的文件指针,用于将数据输出到文件里。
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指针的来源。
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指针来源。
CURLOPT_NOPROGRESS,CURLOPT_PROGRESSFUNCTION,CURLOPT_PROGRESSDATA
跟数据传输进度相关的参数。CURLOPT_PROGRESSFUNCTION 指定的函数正常情况下每秒被libcurl调用一次,为了使CURLOPT_PROGRESSFUNCTION被调用,CURLOPT_NOPROGRESS必须被设置为false,CURLOPT_PROGRESSDATA指定的参数将作为CURLOPT_PROGRESSFUNCTION指定函数的第一个参数
CURLOPT_TIMEOUT,CURLOPT_CONNECTIONTIMEOUT:
CURLOPT_TIMEOUT 由于设置传输时间,CURLOPT_CONNECTIONTIMEOUT 设置连接等待时间
CURLOPT_FOLLOWLOCATION
设置重定位URL
CURLOPT_RANGE: CURLOPT_RESUME_FROM:
断点续传相关设置。CURLOPT_RANGE 指定char *参数传递给libcurl,用于指明http域的RANGE头域,例如:
表示头500个字节:bytes=0-499
表示第二个500字节:bytes=500-999
表示最后500个字节:bytes=-500
表示500字节以后的范围:bytes=500-
第一个和最后一个字节:bytes=0-0,-1
同时指定几个范围:bytes=500-600,601-999
CURLOPT_RESUME_FROM 传递一个long参数给libcurl,指定你希望开始传递的 偏移量。