首先声明:本人现在使用的curl是8.0.1的mingw版本,windows的mingw版本不再需要自编译!windows的mingw版本不再需要自编译!windows的mingw版本不再需要自编译!(重要的话讲三遍)以后版本再次更新可能使用方法还会有变化,请以最新的指南为准!
我在查遍全网的curl使用指南后,终于在某一天的下午突然潘然醒悟!最终可以成功使用了curl,简直令我潸然泪下。为了不让其他小伙伴们不再受难,我决定写一篇更新过得libcurl教程,本人代码水平极低,我保证这篇教程幼儿园的孩子也能看明白!
一、libcurl简介
专业的看了太多了,就简单说吧,提供C语言的API接口服务,支持多种协议的URL传输库。
二、libcurl的安装与使用
·官方安装网址:curl - Download
·GitHub安装网址:https://github.com/curl/curl
(笔者比较笨逼,官方搞完了以后就没管github了,如有需要请移步其他博客的空间查看!)
打开了以后是这样的,但是!但是!先不要直接下载zip!往下找!
这个里面的安装包才是我们真正需要的!如果是64位就下载64位,32位就下载32位即可
下载完成后解压,文件夹内容如下图,文件夹名为curl-8.0.1_7-win64-mingw:
现在文件夹中bin和lib已经都有了,完全可以直接使用了,所以根本不需要进行自编译!直接开始往环境变量里塞文件就可以了噻
三、环境变量的配置
鼠标右键“我的电脑”——“属性”——相关设置中的“高级系统设置”——“环境变量”
首先在系统变量中新增
CURL_HOME
位置就是你的libcurl的文件位置,我这里是
E:\C++\curl-8.0.1_7-win64-mingw
结果如图
然后在系统变量中找Path,双击点进去,总共要新建两条变量,先新建第一条
%CURL_HOME%\I386
然后是第二条,就是你的libcurl的bin文件的位置,我这里就是按照我的文件存放位置写了,自己写的时候要注意一下
E:\C++\OpenSSL-Win64\bin
结果如图
然后就可以保存,进行下一步啦!
如果不放心,可以打开命令行窗口(cmd)输入curl --help检查一下,如果如图所示肯定就OK了
四.VS的配置
接下来就是要导入VS里面去真正使用了,先随便创个项目,点击“项目”——“属性“,打开属性页
然后在包含目录中添加curl的头文件
E:\C++\curl-8.0.1_7-win64-mingw\include
在库目录中添加curl的库文件
E:\C++\curl-8.0.1_7-win64-mingw\lib
然后需要加入依赖项才能正常使用,不然在用时会出现找不到头文件的问题,依赖项的位置就在”链接器“——“输入”中,需要做的就是把lib里的所有.a文件倒入就可以啦(其实就是我接下来列出来的这些,CV大法即可
libbrotlicommon.a
libbrotlidec.a
libcrypto.a
libcurl.a
libcurl.dll.a
libgsasl.a
libnghttp2.a
libnghttp3.a
libngtcp2.a
libngtcp2_crypto_openssl.a
libssh2.a
libssl.a
libz.a
libzstd.a
什么?你问为什么lib文件里面为什么是.a文件?这是因为curl的mingw版本编译问题,其实.a文件和.lib文件在用法上差别不大,所以直接安心导入.a文件就可以啦!
什么?你不会添加上面这两个文件?别担心,刚开始我也不会,接下来告诉你该如何添加文件
鼠标双击“包含目录”,点击右边的小箭头
点击编辑
就来到了这个界面
点击右上角的“文件夹+”的小图标,再点击...就可以啦
到这里基本就完成了,接下来只需要引入库即可使用了,接下来是个查看百度的测试代码,可以自行测试一下,如果还是会有BUG那可能是没有安装OpenSSL,自行安装即可。
五.测试代码
*注意,这段测试代码是博客园中的fengMisaka大佬的代码,原文在这里:【C++开源库】Windows 下编译 libcurl 库 - fengMisaka - 博客园 (cnblogs.com)
真的非常感谢各路大佬的教程,我才能最后整合出来一个这样比较简单的教程。
#include <curl/curl.h>
int main(int argc, char* argv[]) {
CURL* curl = nullptr;
CURLcode res;
curl = curl_easy_init();
if (curl != nullptr) {
curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com");
/* example.com is redirected, so we tell libcurl to follow redirection */
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}