linux远程升级-curl工具

前言:

服务器会随着应用的需求而改变功能,因此我们需要对服务器版本进行升级。

远程升级需要使用curl工具。

假设A是待升级服务器,B是提供升级服务的机器。

首先我们在B机器上搭建tomcat环境,将升级包放上去,开启服务。(升级包是经过加密的压缩包,用tar工具即可完成,压缩包的密码要保证A机器能知道)

首先判断A机器现有的版本和升级包版本进行对比,判断是否需要升级。

如需要升级,在A机器上利用curl工具,将升级包通过curl函数传输过来。并将升级包进行解密解压缩安装。


curl简介:

curl是利用url语法的开源文件传输工具。


安装curl:

下载源码包,安装三部曲。


使用curl:

直接在C代码test.c中使用。

头文件:

#include 
#include 

编译:

gcc test.c -o test -I /curl/include -L /curl/lib -lcurl

函数接口:

例如下载地址是:https://10.10.10.11:8443/test/test.txt

//写入文件回调函数
static size_t downLoad_Package_Func(void *ptr, size_t size, size_t nmemb, void *userdata)
{
	FILE *fp = (FILE*)userdata;
	size_t written = fwrite(ptr, size, nmemb, fp);
	return written;
}


//获取文件下载进度的回调函数
static int get_Progress_Func(void *ptr, double totalToDownload, double nowDownloaded, double totalToUpLoad, double nowUpLoaded)
{
	int percent = 0;
	long int localLen = *(long int *)ptr;
	if ( totalToDownload > 0 )
	{
		percent = (int)((nowDownloaded + (double)localLen) / (totalToDownload + (double)localLen) * 100);
	}

	printf("Download percent is %0d%%\r", percent);

	return 0;
}

static int downloadFile()
{
	char down_url[100]="https://10.10.10.11:8443/test/test.txt";
	char local_file[100]="/local/test/test.txt"
	long int localLen=10000000000;
	CURL *curlhandle;
	CURLcode res;

	// Create a file to save package.
	FILE *fp = fopen(local_file, "ab+");
	if (! fp)
	{
		return -1;
	}
	fseek(fp, 0, SEEK_END);

	//初始化
	curlhandle = curl_easy_init();
	if (!curlhandle)
	{
		printf("get downloadFile error!\n");
		return -1;
	}
#if 0
	//双向ssl使用
	curl_easy_setopt(curlhandle, CURLOPT_SSL_VERIFYPEER, 1L);
	curl_easy_setopt(curlhandle, CURLOPT_SSL_VERIFYHOST, 0L);
	curl_easy_setopt(curlhandle, CURLOPT_CAINFO,CAFILE);
	curl_easy_setopt(curlhandle, CURLOPT_SSLCERT,CERTF);
	curl_easy_setopt(curlhandle, CURLOPT_SSLKEY,KEYF);
	curl_easy_setopt(curlhandle, CURLOPT_SSLKEYPASSWD,PASSWD);
#endif
	//如果是ssl,不验证服务端证书
	curl_easy_setopt(curlhandle, CURLOPT_SSL_VERIFYPEER, 0L);
	//如果是ssl,不验证服务端name
	curl_easy_setopt(curlhandle, CURLOPT_SSL_VERIFYHOST, 0L);
	//设置url
	curl_easy_setopt(curlhandle, CURLOPT_URL, down_url);
	//下载文件的回调函数和文件指针
	curl_easy_setopt(curlhandle, CURLOPT_WRITEFUNCTION, downLoad_Package_Func);
	curl_easy_setopt(curlhandle, CURLOPT_WRITEDATA, fp);
	//进度条
	curl_easy_setopt(curlhandle, CURLOPT_NOPROGRESS, 0L);
	curl_easy_setopt(curlhandle, CURLOPT_PROGRESSFUNCTION, get_Progress_Func);
	curl_easy_setopt(curlhandle, CURLOPT_PROGRESSDATA, &localLen);
	//设置一个长整形数,控制传送多少字节
	curl_easy_setopt(curlhandle, CURLOPT_LOW_SPEED_LIMIT, 1L);
	//设置一个长整形数,控制多少秒传送CURLOPT_LOW_SPEED_LIMIT规定的字节数
	curl_easy_setopt(curlhandle, CURLOPT_LOW_SPEED_TIME, 10L);
	//不输出header头
	curl_easy_setopt(curlhandle, CURLOPT_HEADER, 0L);
	//接收body
	curl_easy_setopt(curlhandle, CURLOPT_NOBODY, 0L);
	//断点续传
	curl_easy_setopt(curlhandle, CURLOPT_RESUME_FROM, localLen);
	//不输出冗余信息
	curl_easy_setopt(curlhandle, CURLOPT_VERBOSE, 0L);
	//多线程时建议设置
	//curl_easy_setopt(curlhandle, CURLOPT_NOSIGNAL, 1L);

	//下载文件
	res = curl_easy_perform(curlhandle);
	curl_easy_cleanup(curlhandle);
	if (res != 0)
	{
		fclose(fp);
		printf("get downloadFile error!\n");
		return -1;
	}

	fclose(fp);
	return 0;
}


完!!

你可能感兴趣的:(linux,C高级编程)