libcurl网络协议库

libcurl网络协议库

@TOC

1、简介

1.libcurl是跨平台网络协议库 2.支持应用层http,https,ftp,gopher,tellnet,dict,file,dap协议 3.libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。 4.libcurl官网 5.库下载地址

2、安装

2.1、安装库

要允许https,要在安装libcur之前,安装openssl库 百度搜索 wget OpenSSL,找到库安装 下载库:wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz 解压:tar xvf openssl-1.1.1a.tar.gz 配置,不需要指定路径:./config 编译:make 安装:sudo make install

树莓派安装openssl库 如果树莓派有库,升级库版本,用指令:openssl version 下载解压后,配置更新:./config shared zlib 安装:make && sudo make install 设置软连接使其使用新的OpenSSL版本 刚刚安装的OpenSSL默认安装在/usr/local/ssl ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl ln -s /usr/local/ssl/include/openssl /usr/include/openssl 更新动态链接库数据 sudo sh -c “echo ‘/usr/local/lib’ >> /etc/ld.so.conf” 查看版本openssl version发现并没有成功 主要是LD_LIBRARY_PATH这个环境变量没有指定导致openssl正在使用旧的系统OpenSSL库 echo “export LD_LIBRARY_PATH=/usr/local/lib” >> ~/.bashrc export LD_LIBRARY_PATH=/usr/local/lib

树莓派升级库参考博文:Linux升级openssl 安装openssl报错openssl: /usr/lib/x86_64-linux-gnu/libssl.so.1.1: version `OPENSSL_1_1_1’ not found

下载

解压

tar xvf curl-7.71.1.tar.bz2

配置安装路径,编译器

./configure --prefix=$PWD/_install //安装到_install文件夹,默认编译器gcc x86架构的

./configure --prefix=$PWD/_install --with-ssl//支持ssl

./configure --prefix=$PWD/_install --host=arm-linux //树莓派编译器

编译

make

安装

make install

2.2、解压完看库文档

1.README 介绍文档 2.docs/curl.1 用户操作手册 3.FAQ 问答文件 4.INSTALL INSTALL.md 怎么编译,安装

找到要安装的环境:Unix ./configure 配置,安装到哪里,没参数表示默认安装 make 编译 make install 把编译结果拷贝到相关文件夹下 ./configure --help 和ls --help一样,查看参数 ./configure --prefix=xxx 指定安装路径 ./configure --host=HOST 交叉编译,指定编译器

3、使用

参考博文:libcurl实现

3.1、API

CURLcode curl_global_init(long flags);

初始化crul库,只能调用一次,不调用自动调用,相当于socket() 参数:CURL_GLOBAL_ALL或CURL_GLOBAL_DEFAULT 初始化所有可能的调用

void curl_global_cleanup(void);

结束crul,和上面函数是一对

CURL *curl_easy_init();

得到指针,之后操作这个指针,类似相当于accept() 返回值:CURL指针

CURLcode curl_easy_setopt(CURL *hand,CURLoption option, parameter);

设置curl,操作,干什么 参数1:CURL指针 参数2:CURLOPT_URL 设置访问curl网站 CURLOPT_WRITEFUNCTION 返回http头输出到哪里 参数3:取决于参数2

curl_easy_perform()

调用,运作完成传输

curl_easy_cleanup(CURL *handle)

释放内存,相当于释放accept()的返回值

3.2、Linux下运行

1.编写程序,访问网页

初始化库

初始化curl,得到指针curl

操作设置curl

执行perform

释放curl

结束库 代码如下

#include

#include

#include

size_t fun( void *ptr, size_t size, size_t nmemb, void *stream)

{

char buf[1024] = {'\0'};

strncpy(buf, ptr, 1024);

printf("%s\n",buf);

}

int getUrl(char *filename)

{

CURL *curl;

CURLcode res;

FILE *fp;

if ((fp = fopen(filename, "w")) == NULL) // 返回结果用文件存储

return 0;

struct curl_slist *headers = NULL;

headers = curl_slist_append(headers, "Accept: Agent-007");

curl = curl_easy_init(); // 初始化

if (curl)

{

//curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");// 代理

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);// 改协议头

curl_easy_setopt(curl, CURLOPT_URL,"http://www.baidu.com");

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, fun);

// 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_slist_free_all(headers);

curl_easy_cleanup(curl);

}

fclose(fp);

return 1;

}

}

int main(void)

{

curl_global_init(CURL_GLOBAL_DEFAULT);

getUrl("./get");

curl_global_cleanup();

}

/*运行结果

← 猪脚汤的做法 阴阳师妖刀之秘籍在哪里?挑战本妖刀秘籍如何进入? →