libcurl库:支持跨平台的网络协议库开发
在网上找压缩包类似于:curl-7.71.1.tax.gz
然后解压完后可以看到根目录下有一个文件INSTALL,一般开源包文件夹都包含了这个文件,这个文件是告诉我们怎么去安装这个库的
如果根目录找不到这个文件,那可能在docs文件夹里面。
安装开源库
./configure --prefix=/PWD/_install #指定安装路径为当前文件夹下的_insall文件夹里面
sudo make
make install
这样安装完curl库以后,我们就可以使用curl库进行网络连接了,不过只能适用于不加密的http网络协议。
如果需要连接加密的https的网络协议,那就需要我们安装ssl依赖库。
安装ssl依赖库的指令
wget https://www.openssl.org/source/openssl-1.1.1a.tar.az
解压完安装包后也可以像之前一样找到INSALL文件来看安装指引
安装步骤
sudo make install #因为我们到时候使用库到时候要到环境变量找,所以我们直接将其安装路径不定义,直接安装到环境变量中
我们需要重新编译curl库,因为之前编译的不带ssl,现在安装完ssl后重新编译将ssl加入进去。
void curl_glob_init(long flags);
该函数在curl_glob_cleanup函数未调用时只能调用一次。
如果函数在curl_easy_init调用之前还未调用,会由libcurl库自动调用一次,所以在多线程情况下为了防止多次调用,我们需要记得提前调用该函数。
flags参数
CURL_GLOBAL_ALL //初始化所以可能的调用
CURL_GLOBAL_SSL //初始化支持安全套接字层
CURL_GLOBAL_WIN32 //初始化win32
CURL_GLOBAL_NOTHING //没有额外的初始化
void curl_glob_init(void);
结束libcurl使用时,用来做清理工作
CURL * curl_easy_init(void);
返回一个CURL*型的指针,作为这次开通的会话的句柄。后面对该会话进行的传参操作,都对该句柄进行。
该函数的调用意味着一个会话的开始
void curl_easy_cleanup(void);
一个会话结束调用一次
curl_easy_setopt(CURL* handle,CURLoption option,parameter);
他告诉curl库,程序将有如何的行为,比如查看网页的html代码等
option参数
访问网址参数
CURLOPT_URL //访问目标网址,即配置为这个参数
例子
curl_easy_setopt(curl,CURLOPT_URL,"http://www.baidu.com");
输出http的请求头相关参数
CURLOPT_WRIEFUNCTION //输出http的请求头处理parameter函数,配置这个参数
CURLOPT_WRTEDATA //输出http的请求头到parameter指向的文件
例子
sizet readData(void* ptr,size_t size,size_t nmemb,void *stream) //ptr存放请求头数据,nmemb存放大小
{
printf("get:%s\n",ptr);
}
int fp= fopen("./a.txt",O_RDWR|CREAT,0600);
curl_easy_setopt(curl,CURLOPT_WRIEFUNCTION,readData);
curl_easy_setopt(curl,CURLOPT_WRTEDATA,fp);
返回请求主体相关参数
CURLOPT_HEADERDATA //返回请求主体到parameter指向的文件
例子
curl_easy_setopt(curl,CURLOPT_HEADERDATA,fp);
post形式用法
curl_easy_setopt(curl,CURLOPT_COOKEFILE,"/tmp/cookie.txt"); //指定cookie文件
curl_easy_setopt(curl,CURLOPT_POSTFILELDS,postString); //postString为字符串,根据要连接的文章给的操作手册来拼接
curl_easy_setopt(curl,CURLOPT_URL,"网址URL");
curl_easy_setopt(curl,CURLOPT_WRIEFUNCTION,readData);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);