c++ curl和openssl编译并且支持https

windows系统下的curl库编译有好几种形式。

方法一:下载了curl库后,解压文件,projects\Windows\文件夹下有各种vs项目的各种版本,打开生成DLL Release或DLL Release -DLL Windows SSPI即可.

 (DLL Release - DLL OpenSSL 项目,看方法二操作)

方法二:

前提准备:命令行方式,(windows下的cmake工具叫做nmake,当然打开cmd命令行是没有这个环境的,但是微软已经给我们准备好了有所有vs工具的命令行)

 文件位置:

有了这些工具,我们就可以用命令行的进行,源码编译了.

----------------------------------------------------------------------------------------

步骤:

如果单纯的编译libcurl,这个动态库将不能去发送带ssl验证的https请求,因此需要编译openssl。zlib的作用主要是curl可以自动解码gzip的响应数据。

系统与环境
  • win10 1607
  • x64的处理器与操作系统
  • vs2022

下载文件

zlib库 http://www.zlib.net/ 最新版本就可以(作者下载版本1.2.8);

openssl库 https://www.openssl.org/source/ 根据需求下载版本(作者下载版本1.1.1g);

libssh2:libssh2-1.9.0 (https://libssh2.org/download/libssh2-1.9.0.tar.gz);

libcurl库 https://curl.se/download.html 根据需求下载版本 (为了项目的兼容性,作者使用版本7.58.0)。

约定(四个工具编译的目录放在@统一文件夹 -deps,全部编译release-64位版本):

 (每个编译好的工程里面都有,include,bin , lib  文件夹)

 zlib-1.2.8的编译:

1. 可以用文件中存在的windows工程:contrib\vstudio文件夹

2.cmake工具生成vs工程

环境准备
zlib:zlib-1.2.8 http://www.zlib.net/

步骤
1)导入zlibvc.vcxproj (目标所在目录: xxx\zlib-1.2.8\contrib\vstudio\vc11)
2)更改zlibvc部分属性:
配置管理器为:x64
【常规】->【目标文件名】内容改为zlibwapi;
【C/C++】->【预处理器定义】更改ZLIB_WINAPI–>ZLIB_DLL (为了编译出的dll可以使用zip相关接口)
【链接器】->【常规】->【输出文件】内容改为(OutDir)(𝑂𝑢𝑡𝐷𝑖𝑟)(TargetName).dll
【链接器】->【高级】->【导入库】内容改为(OutDir)(𝑂𝑢𝑡𝐷𝑖𝑟)(TargetName).lib
【链接器】->【调试】->【生成程序库文件】内容改为(OutDir)(𝑂𝑢𝑡𝐷𝑖𝑟)(TargetName).pdb
【链接器】->【调试】->【映射文件名】内容改为(OutDir)(𝑂𝑢𝑡𝐷𝑖𝑟)(TargetName).map

install
本文环境统一将依赖库组织到 @统一文件夹 下
zlib安装目录:@统一文件夹\zlib
安装文件夹组织如下:

 lib和bin文件夹组织如下:

 include包含内容如下:

 openssl-3.2.0编译:   

https://blog.csdn.net/qq_39311335/article/details/116919598

blog.csdn.net/aichen11/article/details/131192209

环境准备

openssl:openssl-1.1.1g
zlib:zlib-1.2.8 (上述zlib编译结果)

步骤
编译前仔细阅读以下INSTALL 和 NOTES.WIN 这两个文件,版本1.0.2对应的文件叫 INSTALL.W32和INSTALL.W64,也不一样,编译过程基本上都在这两个文件里面。
1)安装perl和汇编工具,按照NOTES.WIN里面推荐的去安装 ActivePerl和nasm,一般安装最新版即可。注:官网下载ActivePerl太慢,可以从360的软件管家里面搜索安装。
2)以管理员身份打开VS2017的命令行程序,本文编译x64版本环境,打开 “x64 Native Tools Command Prompt for VS 2017”。在命令行中切换至openssl-1.1.1g 解压根目录,按照如下命令开始编译

复制代码

>> perl Configure VC-WIN64A --prefix=@统一文件夹\openssl --with-zlib-include=@统一文件夹\zlib\include --with-zlib-lib=@统一文件夹\zlib\lib\release\zlib_zip1211.lib zlib-dynamic
# VC-WIN64A:64位版本编译 
# --prefix:编译结果安装目录
# --with-zlib-include:zlib库包含目录
# --with-zlib-lib:zlib库导入库文件
# zlib-dynamic:zlib以dll形式引入
# zlib:支持zlib压缩
# no-shared:编译静态库 不编译dll
# --debug:编译debug版本
# --release:编译release版本

# 此命令行运行过程中会报 @perl openssl错误图 所示错误,忽略即可
>> nmake
>> nmake test
>> nmake install
>> nmake clean

复制代码

报错:Can‘t locate Win32/Console.pm in @INC (you may need to install the Win32::Console module)
请看(要注释一些配置文件):https://blog.csdn.net/qq_40378795/article/details/121002515
使用perl命令编译时,报错,请看 https://blog.csdn.net/csyh1256/article/details/124565972  

install
命令行执行完毕后,内容组织如下:
openssl安装目录:@统一文件夹\openssl
安装文件夹组织如下:

 lib内容如下:

bin内容如下:

在这里使用时:

 加入必要的openssl库后测试:

 curl --cacert cacert.pem "https://www.baidu.com"

可以curl.exe https://www.baidu.com --insecure 验证

curl.exe https://www.baidu.com 错误提示 :https://curl.se/docs/sslcerts.html

详细教程:https://blog.csdn.net/xys206006/article/details/102593075

出现的问题: https://blog.csdn.net/eastcnme/article/details/103090770

openssl携带zlib编译出错:https://blog.csdn.net/weixin_42806458/article/details/110678710

https://blog.csdn.net/aichen11/article/details/131192209

转 :https://blog.csdn.net/weixin_39766005/article/details/109003194

全 :https://blog.csdn.net/xys206006/article/details/102593075

https://blog.csdn.net/qq_37781464/article/details/108512630

openssl编译: https://blog.csdn.net/qq_39311335/article/details/116919598

https://blog.csdn.net/sinat_35178307/article/details/108079987

视频: https://www.bilibili.com/video/BV1bK411n76C/

https://www.bilibili.com/video/BV1S44y1E78a

https://blog.csdn.net/weixin_42206314/article/details/108221982

有curl使用:https://blog.csdn.net/hhy321/article/details/130516445

有curl使用:https://blog.csdn.net/arbboter/article/details/43448189

https://blog.csdn.net/csyh1256/article/details/124565972

zlib 编译 :https://blog.csdn.net/Alexabc3000/article/details/122587893

c++中使用curl进行https访问时,需要设置证书才能正常进行访问。这里提供一种基于libcurl的方法来设置证书。 1. 首先,需要下载证书文件。可以从CA机构或者自己的服务器上获取证书文件。假设证书文件名为"ca.pem",并且放在当前目录下。 2. 使用curl_easy_setopt()函数设置证书。代码如下: ```c++ // 初始化curl CURL *curl = curl_easy_init(); if (curl) { // 设置请求的url curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com"); // 设置证书 curl_easy_setopt(curl, CURLOPT_CAINFO, "ca.pem"); // 执行请求 CURLcode res = curl_easy_perform(curl); // 检查请求是否成功 if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } // 清理curl curl_easy_cleanup(curl); } ``` 在上面的代码中,使用了curl_easy_setopt()函数来设置证书,其中CURLOPT_CAINFO选项指定了证书的文件名。如果证书放在其他目录下,需要指定完整的路径。 3. 编译运行代码。在编译时需要链接curl库。例如,在Linux下可以使用以下命令编译代码: ``` g++ main.cpp -lcurl -o main ``` 在Windows下可以使用以下命令: ``` g++ main.cpp -lcurl -lssl -lcrypto -lz -o main.exe ``` 注意,Windows下需要链接的库要比Linux下多一些。 以上就是使用curl设置证书的方法。需要注意的是,证书文件的格式必须是PEM格式,否则curl将无法识别。如果证书文件不是PEM格式,可以使用openssl将其转换为PEM格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值