linux网络编程

Libcurl库

libcurl库:支持跨平台的网络协议库开发

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加入进去。

Libcurl库的API

curl_glob_init

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			//没有额外的初始化

curl_glob_cleanup

void curl_glob_init(void);

结束libcurl使用时,用来做清理工作

curl_easy_init

CURL * curl_easy_init(void);

返回一个CURL*型的指针,作为这次开通的会话的句柄。后面对该会话进行的传参操作,都对该句柄进行。
该函数的调用意味着一个会话的开始

curl_easy_cleanup

void curl_easy_cleanup(void);

一个会话结束调用一次

curl_easy_setopt

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

你可能感兴趣的:(linux,网络,arm开发)