c++ curl +openssl 编译包,以求支持HTTPS传输

2023-11-03

1 缘起

  原来就了解些libcurl,一直没有机会在项目实际使用libcurl.
   恰好最近一个云存储的项目,服务器使用openstack 恰好我负责现在的一个云存储SDK c++版本的开发中。 与服务器的通信都是基于HTTP/HTTPS协议通信。先做window下的sdk,在逐步移植到linux和MAC平台下。

  在curl的官方网站 **http://curl.haxx.se/download.html** 提供编译好libcurl包,用于老外的使用的 VC++编译器过高,本人使用VC2010,所以不兼容,所以参照网上的文章,一步一步搭建起基于OpenSSL和OpenSSH的的libcurl,能 够支持Https协议。

   最后写一个demod工程,演示下libcurl强大的威力和自己使用libcurl的一些心得。

2 curl/libcurl 介绍

     先看的baidu 百科是怎么介绍curl

它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。
curl同样支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证,HTTP上传, 代理服务器, cookies, 用户名/密码认证, 下载文件 断点续传,上载文件断点续传,http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,通过http代理服务器上传文件到 FTP服务器等等,功能十分强大。
Windows 操作系统下的 网络蚂蚁网际快车(FlashGet)的功能它都可以做到。准确的说,curl支持文件的上传和下载,所以是一个综合传输工具,但是按照传统,用户习惯称curl为 下载工具。          
     
     libcurl就是curl的库,其中在C++/C 在程序涉及到url协议通迅的时候,libcurl是首选。现在流行的网盘客户端(百度的,360的),在与服务器回话的,都是使用libcurl作为底层库
         

3 安装OpenSsl开发包

     libcurl主要通过SSL(Secure Sockets Layer  安全套接层)和TLS(Transport Layer Security  传输层安全),在 传输层对网络连接进行加密。
     本文使用OpenSSL使用作为开发库。 也可以使用GnuTLS来支持TLS/SSL协议
 
  
     libcurl要支持ssh协议可以通过libssh2库进行支持。
     
     用解压工具解压包解压到硬盘上,方便可以解压大C:\openssl-1.0.2-stable-SNAP-20140704
     解压工具haozip ( http://haozip.2345.com/)
 

4  安装perl程序

    openssl编译 Configure的时候,使用到perl程序,在window 下比较流行当仁不让就是 activeperl
    安装比较简单,默认安装就可以了 ,来几张截图
   
 

5  安装NASM 汇编器

  
   编译可以使用vc++编译器来编译OpenSSL,使用汇编器编译有更快的速度,本人使用汇编器是nasm 
     http://www.nasm.us/pub/nasm/releasebuilds/2.11.05/win32/nasm-2.11.05-installer.exe 
   安装过程如下图所示
  
  

6  使用汇编器NASM编译OpenSSL库
   

   本人安装是VS2010开发环境, OpenSSL需要使用Visual Studio 命令行方式编译。

      1) 点击 开始->所有程序->Microsoft Visual Studio 2010->Visual Studio Tools->Visual Studio 命令提示(2010)

      2)再打开编译窗口将上面安装NASM的路径添加到PATH环境变量里  PATH=%PATH%;"c:\Program Files (x86)\nasm"
      3)进入OpenSSL的工作目录 C:\openssl-1.0.2-stable-SNAP-20140704

      4)  新建一个编译好的程序的输出目录 mkdir C:\openssl_lib

      
  

       5) 配置OpenSSL的安装目录 perl Configure VC-WIN32  --prefix=c:/openssl_lib

          输出结果如下

         

        6) 生存Makefile 文件 ms\do_nasm

         如果不是使用nasm汇编器,这一步使用其他的命令代代替(如ms\do_ms)

         输出如下

         

         7)开始编译如果要编译成动态库使用  nmake -f ms\ntdll.mak

              如果要编译成静态库使用nmake -f ms\nt.mak

              本次编译成静态链接库,所以使用nmake -f ms\nt.mak

              需要等待一段时间。  可以运动下。

        8) 安装到配置目录

             所以使用nmake -f ms\nt.mak install 

             前面第5步 已经设置好了安装目录 c:/openssl_lib ,现在去里面看看 是什么

            

 

 7 编译curl/libcurl

      将下载curl-7.37.0.tar的包,解压到一个文件目录,本例解压到E:\curl-7.37.0\

   进入winbuild目录,通过 nmake /f Makefile.vc 查看下帮助

      

 

      执行 nmake /f Makefile.vc mode=dll VC=10 WITH_DEVEL=C:\openssl_lib WITH_SSL=static ENABLE_SSPI=no ENABLE_IPV6=no

      

     命令注释 mode=dll 编译libcurl位动态链接库,如果static 就是把libcurl编译位静态库 

     VC=10 代表使用的是VC2010

     WITH_DEVEL=C:\openssl_lib 表示用到第三方开发包的目录,本例上面已经将openssl编译好的开发包,安装到此目录

     WITH_SSL=static ,代表使用libssl库 是静态库

     ENABLE_SSPI=no ENABLE_IPV6=no(禁用SSPI,ipV6功能)

     稍等片刻就编译成功了。

 

8  测试 编译后的libcurl是否支持HTTPS协议 ?

       在第7步,编译成功以后,会生成libcurl 还有外壳程序curl .

       安装上面的配置,找到curl和libcurl

      

       

        下面测试 www.baidu.com 和支持加密 https://mail.qq.com

        

       

         经过测试访问加密HTTPS协议传输,和不用加密的HTTP都能成功。。  所以编译libcurl 就算圆满成功 大功告成!!!

   

      9 总结:

       libcurl可以通过openssl作为底层库,来支持HTTPS协议,比较麻烦就是编译openssl

       本文使用nasm+acitiveperl的工具去编译openssl,一般都很顺利,。

       通过仔细阅读libcurl的makefile,还是很容易配置编译libcurl.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++ curl +openssl 编译包,以求支持HTTPS传输 的相关文章

  • mysql脏读,幻读,不可重复读以及间隙所解决幻读

    1 数据脏读 事务a修改了某条数据 然后事务b读取了事务a修改的该条数据 然后事务a由于某些原因 事务a回滚了 这样事务b读到的数据就和回滚的数据不同了 这时事务b读取的数据就是脏数据 概况一句话就是一个事务读取了另一个事务未提交的数据 2
  • 免费看小说,国产浏览器出手了,吊打各类阅读软件

    一 UC浏览器 小说多且免费 UC浏览器提供了非常方便的小说阅读体验 用户可以随意选择自己想要阅读的小说网站 并且一键切换到纯净的阅读模式 享受真正的沉浸式阅读 此外 UC浏览器还自带书城 用户可以在这里找到各种受欢迎的小说 避免书荒 书城
  • webpack-dev-server配合nginx启动时遇到热替换模块请求跨域

    当本地URL已经用Nginx代理 例如http vue native guahao inc 代理到http vue native guahao inc com不带端口号时 本地的webpack dev server会遇到请求热更新的json
  • android.accounts包

    包 android accounts 英文原文 http developer android com reference android accounts package summary html 版本 Android 4 0 r1 译者署
  • 概率论与数理统计

    概率论与数理统计 一 概率论基本概述 1 1 随机试验 1 2 样本空间与随机事件 1 3 频率与概率 1 4 古典概型 1 5 条件概率 1 6 独立性 二 随机变量及其分布 2 1 随机变量 2 2 离散型随机变量及其分布 2 3 随机
  • mbed OS会成为物联网的 Android 吗?

    转载至 http www mbed org cn archives mbed os E4 BC 9A E6 88 90 E4 B8 BA E7 89 A9 E8 81 94 E7 BD 91 E7 9A 84 android E5 90 9
  • 使用远程服务器总是因网络中断、终端不小心关闭、锁屏等导致程序中断

    分享编程工具实用方法 面对无穷无尽的配置bug 其他文章 Windows连接远程Linux服务器 VSCode配置 免密设置 跳板机配置 GeForce RTX 3090无法使用mmsegmentation官方推荐cuda版本 ubuntu
  • 计算机辅助实验圆弧连接画法,机械制图基础-18、圆弧连接的画法

    绘图时 经常要用已知半径的圆弧 但圆心要在作图中确定 这样的圆弧 称为连接圆弧 连接圆弧需要光滑连接已知直线或圆弧 光滑连接也就是要在连接点处相切 为了保证相切 必须准确地作出连接圆弧的圆心和切点 一 用已知半径为R的圆弧连接两条已知直线
  • 超七成阅读APP都借百度语音技术促用户增长

    全国十多亿人在这个春节集体 关门闭户 与手机和网络作伴 除了手游和短视频流量飞涨 在线阅读也迎来 高光时刻 特别是当手机阅读APP标配了语音朗读即 听书 功能 据百度大脑AI开放平台的后台数据显示 疫情期间 支持 听书 功能的语音合成技术的
  • 重新映射图像——OpenCV Remap实例

    重新映射图像 OpenCV Remap实例 在计算机视觉领域中 图像的几何变换是一项重要的工作 重要的任务之一是将图像转换为其他形式 例如投影或扭曲 OpenCV的Remap函数提供了一个简单和灵活的方法来执行这种类型的变换 下面展示了如何
  • unsigned char 数值溢出问题

    include
  • 在D盘使用SVN检出文件后,整个盘出现蓝色问号的解决办法。

    在D盘使用SVN检出文件后 整个盘出现蓝色问号的解决办法 原因 在该盘的根目录执行了checkout操作 SVN将整个盘作为了一个版本库的本地副本 那些问号表示这些文件没有被SVN控制 解决方法 1 在文件上右击 选择TortoiseSVN
  • android studio电影院选座,8排电影院选座最佳位置

    8排电影院选座最佳位置在哪里呢 8排电影院属于小影厅 小影厅银幕宽度在10米以下 座位100以内 座位排数通常拥有8 14排 小影厅整体空间小 选座时要选中间稍靠后一些的位置 由于整体排数少 因此选即便选择靠后一些的排数实际上距银幕的距离也
  • ubuntu 同时使用无线网卡和有线网卡

    转载于这位博主 文章
  • Ubuntu18.04 取消开机密码 实现自动登录

    因为要把Ubuntu设备作为服务器 实现开机自动运行服务程序 所以需要取消开机密码 实现自动登录 1 点击桌面右上角向下的箭头 点击设置图标 2 点击右上角的 Unlock 3 在弹出的窗口中输入系统登录密码 点击右下角 Authentic
  • OpenMP并行编程

    1 总览 OpenMP Open Multi Processing 是一种用于共享内存并行系统的多线程程序设计方案 支持的编程语言包括C C 和Fortran OpenMP提供了对并行算法的高层抽象描述 通过线程实现并行化 特别适合在多核C

随机推荐

  • springboot使用logback日志框架超详细教程

    前言 项目中日志系统是必不可少的 目前比较流行的日志框架有log4j logback等 可能大家还不知道 这两个框架的作者是同一个人 Logback旨在作为流行的log4j项目的后续版本 从而恢复log4j离开的位置 另外 slf4j Si
  • 阶乘约数

    include
  • 【4月第二周学习记录】数据结构与算法王卓-第六章图-图的遍历(邻接矩阵与邻接表,DFS与BFS)

    1 图的遍历基本思路与方法 图的遍历的定义与visited数组 常用的遍历方法 深度优先搜索遍历 Depth First Search DFS 广度优先搜索遍历 Breadth First Search BFS 2 深度优先搜索遍历 Dep
  • 华为SMC2.0视频会议系统总结(一)

    简单总结下 新上手的华为视频会议SMC2 0会控系统 第一次接触华为的会控系统 理解的不是很深刻 简单的记下来 省得以后忘记 因为客户使用的泛微OA系统 我们公司 南大智慧 负责提供华为设备 并做相应的接口开发工作 我们主要的工作内容就是确
  • 控制器的编码器

    一 原理 控制器内部为每个轴配置了脉冲计数装置 控制器默认的脉冲计数源是外部编码器 如果用户 在接线时将外部编码器的信号与端子板 25pin轴接口的编码器信号接在一起 就可以调用指令读取外部编码器的值 如果用户没有接外部编码器反馈信号 例如
  • java基础学习 day22(方法,return,重载)

    1 方法 是程序中最小的执行单元 方法里面的代码 要么全都执行 要么全都不执行 重复的代码 具有独立功能的代码可以抽取到方法中 方法的好处 可以提高代码的复用性 可以提高代码的可维护性 java虚拟机在运行时会先自动调用main 方法 2
  • ## 带AB相编码器直流减速电机测转动速度及角度深度解析

    带AB相编码器直流减速电机测转动速度及角度深度解析 下图为编码器输出的AB相波形 一般情况下 我们只测A相 或B相 的上升沿或下降沿 但四倍频的方法是测A相和B相的上升沿和下降沿 在同样的时间内 计数脉冲是以前的4倍 然后stm32单片机可
  • 一致性的3种协议,并发,事务

    Two Phase Commit MVCC Paxos TPC对应于传统数据库上的local cluster的一致性 分布式事务 每个节点上的local事务可以是不同的亦可以是相同的 replica MVCC的思想是抓住Transactio
  • vue项目中使用vee-validate表单验证

    一 写在前面 作为前端开发 在项目中避免不了做表单到页面 做表单页面就避免不了要做表单效验 如果多个表单页面有相同都表单比如用户名 密码等等 不能每个页面都写一次验证规则 作者项目平时使用都vue比较多 所有使用vee validate插件
  • C++标准模板库(Standard Template Library,STL)

    文章目录 标准模板库介绍 C 标准库头文件 STL 组成 迭代器 算法 适配器 标准模板库介绍 标准模板库 Standard Template Library STL 是惠普实验室开发的一系列软件的统称 虽说它主要出现到C 中 但在被引入C
  • JDK安装及JAVA环境变量配置(JDK1.8版本)

    一 JDK官网下载地址 https www oracle com technetwork java javase downloads jdk12 downloads 5295953 html JDK1 8下载地址 https www ora
  • 网络爬虫反反爬小技巧(二)Pyppeteer

    上一节说到了Selenium 它的功能的确非常强大 但很多时候我们会发现 Selenium 还是有一些不太方便的地方 比如速度太慢 对版本配置要求严苛 最麻烦是经常要更新对应的驱动 还有些网页是可以检测到是否使用了Selenium 所以在这
  • STL hash_map使用

    今天在使用STL中的hash map模板遇到使用PTCHAR作为Key时无法对字符串进行正确比较的问题 在网上查找相应的文章可惜没有找到 但找到了http www stlchina org twiki bin view pl Main ST
  • EXT文件系统族-Ext2文件系统

    一 学习内容 1 Ext2物理结构 2 Ext2数据结构 3 Ext2文件系统操作 二 Ext2物理结构 Ext2第二代扩展文件系统 Second extended filesystem 是LINUX内核使用的文件系统 Ext2文件系统特性
  • Java回调(callback)机制

    一 简述 从软件模块之间的调用方式看 分为三类 同步调用 异步调用和回调 1 同步调用 同步调用是最基本并且最简单的一种调用方式 类 A 的 a 调用类 B 的 b 一直等待 b 执行完毕 a 继续往下走 该调用方式适用于 b 执行时间不长
  • 【Node.js】node入门全攻略

    文章目录 一 初识 Node js 一 JS 解析引擎 二 JS 运行环境 三 Node js 1 作用 2 命令 二 fs 文件系统模块 一 fs 模块 二 方法 1 fs readFile 2 fs writeFile 3 路径动态拼接
  • Qt--深度图伪彩色渲染

    项目源码地址 Windows Linux安装包 之前写了一个小程序 对深度图做伪彩色渲染 便于可视化 也可以打开ppm的彩色图片 界面大概长这样
  • C练习实例11-15题打卡

    目录 题目11 思路 代码 结果 题目12 思路 代码 结果 题目13 思路 代码 结果 题目14 思路 代码 结果 题目15 思路 代码 结果 题目11 古典问题 兔子生崽 有一对兔子 从出生后第3个月起每个月都生一对兔子 小兔子长到第三
  • Android列表小部件(Widget)开发详解

    好久没博客更新了 本篇文章来学习一下如何实现一个Android列表小部件 效果可以参看下图 这个页面如果是在App内部实现 相信只要有一点Android基础的童鞋都能很轻松写出来 但是如果放到Widget中可能就不是那么简单了 因为Widg
  • c++ curl +openssl 编译包,以求支持HTTPS传输

    在window平台下 自己DIY编译OpenSSL Libcurl 来支持HTTPS传输协议 1 缘起 原来就了解些libcurl 一直没有机会在项目实际使用libcurl 恰好最近一个云存储的项目 服务器使用openstack 恰好我负责