由想使用libcurl引起的一系列学习过程

想学习使用curl。想自己编译。结果。。。。

curl github库地址:https://github.com/curl/curl

官网下载地址 :http://curl.haxx.se/

1.此处使用github库地址,拉取代码

拉去后,等下,先下载cmake

cmake下载地址:https://cmake.org/download/

在这里插入图片描述

下载之后安装,安装后使用

将url路径填到上面

新建一个build填到下面

在这里插入图片描述

填好后,点击configure

在这里插入图片描述

选vs版本

在这里插入图片描述

选位数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TvDNjLmi-1671767344588)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20221223104706729.png)]

选好之后选finish,就开始运行了,就开始编译了

在这里插入图片描述

等待结束之后,再点一下generate。

在这里插入图片描述

在build中找到sln。运行。生成ALLbuild。

在这里插入图片描述

在这里插入图片描述

就能看到release或debug中的生成的库了
在这里插入图片描述

到此cmake编译成功。

2.还有简单的安装curl的库的方法

使用vcpkg安装。首先安装vcpkg

1、打开Git CMD命令行工具,使用 cd 到建立的目标路径(如:C:\src);
2、输入命令:git clone https://github.com/Microsoft/vcpkg ,将开启vcpkg下载;
3、下载完成后,会自动建立一个vcpkg文件夹,就需要再次使用 cd 命令到vcpkg文件路径内;

在这里插入图片描述

4、运行 .\bootstrap-vcpkg.bat 等待运行完成。至此vcpkg安装完成。

在这里插入图片描述

5、Visual Studio与链接:
为了在Visual Studio中使用vcpkg,只需要进行一下操作,在之后的使用中就可以直接使用了(需要开启管理员权限),在完成以上操作的前提下,运行命令: .\vcpkg integrate install。运行结果如下,即链接成功,系统里所有C++编辑器都能与vcpkg建立链接了。

提示需要cmake,这个在之后安装库时会自动下载安装。

在这里插入图片描述

6、C\C++库的安装:
运行命令: .\vcpkg install [packages to install] 。
每次安装时,打开Git CMD后只需要cd到vcpkg的安装目录即可(如:C:\src\vcpkg)。使用 vcpkg help 或者 vcpkg help[comment] 可以获取特定命令的命令帮助,通过。.\vcpkg search [search term] 。
注意: vcpkg默认安装编译的是 X86 ,可以通过命令指定为 X64 ,例如:

.\vcpkg install zlib:x64-windows
.\vcpkg install zlib openssl --triplet x64-windows

安装完vcpkg之后,设置系统变量

D:\work1\vcpkg\vcpkg 添加到PATH中

然后就可以用

\vcpkg install curl下载 curl

会下载到D:\work1\vcpkg\vcpkg 中的installed\x86-windows中

lib include bin中会有你想要的。东西

3.使用。使用的是vcpkg下载的curl

直接#include <curl/curl.h> 就能用了。

/*
 * @ libcurl使用示例
 * @ 2014.04.29
 * @ g++ -o LibCurlFunc LibCurlFunc.cpp -lcurl
 */
#include <iostream>
#include <string.h>
#include <curl/curl.h>
using namespace std;

/*
	Http请求结束的回调函数
	@ 会被调用多次,有下载到数据(http文件)就回调,直到下载完
 */
static size_t WriteFunction(void* input, size_t uSize, size_t uCount, void* avg)
{
	/* cout << "[WriteFunction]:" << endl
		 << "input=" << (char*)input << endl
		 << "elementSize=" << uSize << endl
		 << "elementCount=" << uCount << endl;*/

		 // 将请求返回数据input拷贝到avg中(avg为一开始curl_easy_setopt设置的参)
	size_t uLen = uSize * uCount;
	// string &sBuffer = *reinterpret_cast<string *>(avg);
	// sBuffer.append(reinterpret_cast<const char *>(input), uLen);
	string* pStr = (string*)(avg);
	pStr->append((char*)(input), uLen);

	// 只有返回uSize*uCount才会返回成功
	return uLen;
}

int main()
{
	CURL* pCurl = NULL;
	CURLcode code;

	/* CURLcode curl_global_init(long flags)
	   @ 初始化libcurl,全局只需调一次
	   @ flags:	CURL_GLOBAL_DEFAULT 	// 等同于CURL_GLOBAL_ALL
				CURL_GLOBAL_ALL     	// 初始化所有的可能的调用
				CURL_GLOBAL_SSL     	// 初始化支持安全套接字层
				CURL_GLOBAL_WIN32   	// 初始化win32套接字库
				CURL_GLOBAL_NOTHING 	// 没有额外的初始化
				......
	 */
	code = curl_global_init(CURL_GLOBAL_DEFAULT);
	if (code != CURLE_OK) {
		cout << "curl_global_init() Err" << endl;
		return -1;
	}

	/* CURL *curl_easy_init()
	   @ 初始化curl生成CURL *curl指针
	 */
	pCurl = curl_easy_init();
	if (pCurl == NULL) {
		cout << "curl_easy_init() Err" << endl;
		return -1;
	}

	string sUrl = "www.baidu.com";
	curl_slist* pHeaders = NULL;
	string sBuffer;

	/* struct curl_slist *curl_slist_append(struct curl_slist * list, const char * string);
	   @ 添加Http消息头
	   @ 属性string:形式为name+": "+contents
	 */
	string header = "Accept: Agent-007";
	pHeaders = curl_slist_append(pHeaders, header.c_str());

	/* CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);
	   @ 设置下载属性及常用参数
	 */
	curl_easy_setopt(pCurl, CURLOPT_URL, "www.baidu.com"); 	// 访问的URL
	curl_easy_setopt(pCurl, CURLOPT_HTTPHEADER, pHeaders);  // 属性头部(要不pHeader就没用了)
	curl_easy_setopt(pCurl, CURLOPT_TIMEOUT, 20); 			// 超时(单位S)
	curl_easy_setopt(pCurl, CURLOPT_HEADER, 1); 			// 下载数据包括HTTP头部

	curl_easy_setopt(pCurl, CURLOPT_WRITEFUNCTION, &WriteFunction);	// !数据回调函数
	curl_easy_setopt(pCurl, CURLOPT_WRITEDATA, &sBuffer);			// !数据回调函数的参,一般为Buffer或文件fd

	/* CURLcode curl_easy_perform(CURL *handle);
	   @ 开始下载
	 */
	code = curl_easy_perform(pCurl);
	if (code != CURLE_OK) {
		cout << "curl_easy_perform() Err" << endl;
		return -1;
	}

	/* CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );
	   @ 获取下载完的相关信息
	   @ info:CURLINFO_RESPONSE_CODE  	// 获取返回的Http码
			   CURLINFO_TOTAL_TIME  	// 获取总的请求下载时间
			   CURLINFO_SIZE_DOWNLOAD  	// 获取下载的文件大小
			   ......
	 */
	long retCode = 0;
	code = curl_easy_getinfo(pCurl, CURLINFO_RESPONSE_CODE, &retCode);
	if (code != CURLE_OK) {
		cout << "curl_easy_perform() Err" << endl;
		return -1;
	}
	cout << "[Http Return Code] : " << retCode << endl;
	cout << "[Http Context] : " << endl << sBuffer << endl;

	/* void curl_easy_cleanup(CURL * handle);
	   @ 释放CURL *curl指针
	 */
	curl_easy_cleanup(pCurl);

	/* void curl_global_cleanup(void);
	   @ 初始化libcurl,全局也只需调一次
	 */
	curl_global_cleanup();
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值