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.

在window平台下,自己DIY编译OpenSSL,Libcurl ,来支持HTTPS传输协议的更多相关文章

  1. Ubuntu+NDK编译openssl(为了Android上使用libcurl且支持HTTPS协议)

    为了Android上使用libcurl且支持HTTPS协议,需要依赖openssl,因此先来了解一下如何编译OpenSSL1.编译ARM下的共享库(默认的)我使用的是guardianproject的o ...

  2. 深度学习-Windows平台下的Caffe编译教程

    一.安装CUDA7.5 Cuda是英伟达推出的GPU加速运算平台 我这里安装的是cuda7.5,已经安装过的忽略,还没有安装过的这里有安装教程.windows下面安装还是非常简单的. https:// ...

  3. Window平台下tree 命令使用

    WIndow 平台要想打印目录树,可以用cmd工具或者power shell 的tree命令实现 tree 命令格式和参数: TREE [drive:][path] [/F] [/A] /F 显示每个 ...

  4. window平台下的MySQL快速安装。(不好意思,未完成待续,请飘过)

    MySQL安装方式 MSI安装(Windows Installer) ZIP安装 最好选择ZIP安装,比较干净,也快速搞好. 下载链接:http://pan.baidu.com/s/1sjFZZul ...

  5. Window平台下React Native 开发环境搭建

    1. 安装Node.js 2. 安装react-native-cli 命令行工具 npm install -g react-nativew-cli 3. 创建项目 $ react-native ini ...

  6. 问题总结——window平台下grunt\bower安装后无法运行的问题

    一.问题: 安装grunt或者bower后,在cmd控制台运行grunt -version 或者 bower -v会出现:“xxx不是内部或外部命令,也不是可运行的程序或批处理文件”,

  7. window平台下 cmd 命令窗口的编码设置

    在WINDOWS上打开控制台界面,发现默认的编码是GBK,这样有时候写完的代码运行的时候就会出码,基于此,查阅各方资料,终于得出两种方案. 一.临时解决方案(只针对本次会话有效) 1. 打开控制台,输 ...

  8. 解决Ubuntu(Linux)平台下Sublime Text 3 安装中文输入支持库后 开启gnome-terminal报错的问题

    在Ubuntu下安装Sublim Text3后发现无法输入中文,按照此链接的方法解决后.然后用下列代码配置C++的编译系统: { "cmd":["g++",&q ...

  9. 使用openSSL构造一个支持https的nodejs服务器

    首先通过下面的链接下载openSSL https://slproweb.com/products/Win32OpenSSL.html 下载完毕后,执行openssl进入交互式界面: 使用命令生成pri ...

随机推荐

  1. Linux下more命令C语言实现实践 (Unix-Linux编程实践教程)

    1. more第一版 实现基础功能,显示每一页固定24行文本,“q Enter”退出, “Enter” 下一行, “space Enter”下一页. #include<stdio.h> # ...

  2. mysql 主从数据不一致 Slave_SQL_Running: No 解决方法

    在slave服务器上通过如下命令 mysql> show slave status\G; 显示如下情况: Slave_IO_Running: Yes Slave_SQL_Running: No ...

  3. BCHABC/BCHSV的矛盾所在

    BCHABC: 将BCH以后发展智能合约: 消息方面: 吴忌寒:BCH分叉不可避免 未来可能继续分叉 近日,吴忌寒在北大光华管理学院的区块链培训课程上发表演讲表示,在这种言论自由地环境下,我认为分裂就 ...

  4. PyQt5速成教程

    博客地址 https://www.jianshu.com/nb/26159952

  5. python 字符串 列表 字典 常用方法

    今天学习内容如下: 1.学习昨天练习题目的解题新方法 #1.使用while循环输入 1 2 3 4 5 6 8 9 10 ''' count = 0 while count < 10: coun ...

  6. ubuntu上mongodb的安装

    Ubuntu上安装MongoDB的完全步骤以及注意事项 本文我们详细介绍了Ubuntu上安装MongoDB的全部过程,希望本次的介绍能够对您有所帮助. AD: 2013大数据全球技术峰会课程PPT下载 ...

  7. SQL删除重复数据只保留一条数据

    1.表结构与数据: CREATE TABLE tablezzl( id int, name ) ); 2.查询出重复的数据: 3.查询出要保留的重复数据: 4.最终的SQL: DELETE FROM ...

  8. stl之容器、迭代器、算法几者之间的关系

    转自:https://blog.csdn.net/bobodem/article/details/49386131 stl包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的优 ...

  9. BZOJ 1969 航线规划 - LCT 维护边双联通分量

    Solution 实际上就是查询 $u$ 到 $v$ 路径上 边双的个数 $ -1$. 并且题目仅有删边, 那么就离线倒序添边. 维护 边双 略有不同: 首先需要一个并查集, 记录 边双内的点. 在 ...

  10. jsonp,ajax,json问题

    JSONP技术 JSONP是解决跨域问题的一种常见方式 跨域问题,因为浏览器有同源策略,所以当不同域间进行数据交互的时候就会出现跨域问题 同源策略:只有在同协议.同域名.同端口的情况下才能进去数据交互 ...