添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

1 缘起

在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作为底层库。

这是个重点,根据我所了解的libcurl不能作为服务器,你可以用它去连接其他的服务器,或者用于极光推送一类的。

如果想写一个http服务器的话可以用mongoose。

3 安装OpenSsl开发包

libcurl主要通过SSL(Secure Sockets Layer ​ ​安全套接层​ ​​)和TLS(Transport Layer Security ​ ​传输层安全​ ​​),在​ ​传输层​ ​对网络连接进行加密。

本文使用OpenSSL使用作为开发库。 也可以使用GnuTLS来支持TLS/SSL协议

libcurl要支持ssh协议可以通过libssh2库进行支持。

下载OpenSsl的包  ​ ​本文使用​ ​​ ​ ​ftp://ftp.openssl.org/snapshot/openssl-1.0.2-stable-SNAP-20140704.tar.gz​

用解压工具解压包解压到硬盘上,方便可以解压大C:\openssl-1.0.2-stable-SNAP-20140704

解压工具haozip (​ ​http://haozip.2345.com/​ ​)

4  安装perl程序

openssl编译 Configure的时候,使用到perl程序,在window 下比较流行当仁不让就是 activeperl

​http://dl.softmgr.qq.com/original/Development/ActivePerl-5.16.3.1604-MSWin32-x64-298023.msi​

安装比较简单,默认安装就可以了 ,来几张截图

C++ libcurl 库 实现http通讯_http C++ libcurl 库 实现http通讯_http_02 C++ libcurl 库 实现http通讯_http_03

C++ libcurl 库 实现http通讯_服务器_04 C++ libcurl 库 实现http通讯_代理服务器_05

5  安装NASM 汇编器

编译可以使用vc++编译器来编译OpenSSL,使用汇编器编译有更快的速度,本人使用汇编器是nasm
​​ ​http://www.nasm.us/pub/nasm/releasebuilds/2.11.05/win32/nasm-2.11.05-installer.exe​

安装过程如下图所示

C++ libcurl 库 实现http通讯_c++_06 C++ libcurl 库 实现http通讯_服务器_07 C++ libcurl 库 实现http通讯_perl_08 C++ libcurl 库 实现http通讯_http_09 C++ libcurl 库 实现http通讯_c++_10

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

C++ libcurl 库 实现http通讯_服务器_11

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

输出结果如下

C++ libcurl 库 实现http通讯_服务器_12

6) 生存Makefile 文件 ms\do_nasm

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

输出如下

C++ libcurl 库 实现http通讯_perl_13

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 ,现在去里面看看 是什么

C++ libcurl 库 实现http通讯_c++_14

7 编译curl/libcurl

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

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

C++ libcurl 库 实现http通讯_http_15

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

C++ libcurl 库 实现http通讯_c++_16

命令注释 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

C++ libcurl 库 实现http通讯_服务器_17 C++ libcurl 库 实现http通讯_代理服务器_18

C++ libcurl 库 实现http通讯_http_19

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

C++ libcurl 库 实现http通讯_c++_20

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

ps:整个步骤其实是转载的,不过楼主按照这个步骤最后确实成功了。自己懒得再来一遍截图了。

C++ libcurl 库 实现http通讯_服务器_21

其实最主要的还是libcurl.lib这个库,本身这个库是支持http的 但是不支持https。所以需要用的openssl,先安装了openssl,然后再编译libcurl,会把其编译进去,从而生成的新的libcurl可以支持https。极光推送用的就是https。


1 缘起

在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作为底层库。

这是个重点,根据我所了解的libcurl不能作为服务器,你可以用它去连接其他的服务器,或者用于极光推送一类的。

如果想写一个http服务器的话可以用mongoose。

3 安装OpenSsl开发包

libcurl主要通过SSL(Secure Sockets Layer ​ ​安全套接层​ ​​)和TLS(Transport Layer Security ​ ​传输层安全​ ​​),在​ ​传输层​ ​对网络连接进行加密。

本文使用OpenSSL使用作为开发库。 也可以使用GnuTLS来支持TLS/SSL协议

libcurl要支持ssh协议可以通过libssh2库进行支持。

下载OpenSsl的包  ​ ​本文使用​ ​​ ​ ​ftp://ftp.openssl.org/snapshot/openssl-1.0.2-stable-SNAP-20140704.tar.gz​

用解压工具解压包解压到硬盘上,方便可以解压大C:\openssl-1.0.2-stable-SNAP-20140704

解压工具haozip (​ ​http://haozip.2345.com/​ ​)

4  安装perl程序

openssl编译 Configure的时候,使用到perl程序,在window 下比较流行当仁不让就是 activeperl

​http://dl.softmgr.qq.com/original/Development/ActivePerl-5.16.3.1604-MSWin32-x64-298023.msi​

安装比较简单,默认安装就可以了 ,来几张截图

C++ libcurl 库 实现http通讯_http C++ libcurl 库 实现http通讯_http_02 C++ libcurl 库 实现http通讯_http_03

C++ libcurl 库 实现http通讯_服务器_04 C++ libcurl 库 实现http通讯_代理服务器_05

5  安装NASM 汇编器

编译可以使用vc++编译器来编译OpenSSL,使用汇编器编译有更快的速度,本人使用汇编器是nasm
​​ ​http://www.nasm.us/pub/nasm/releasebuilds/2.11.05/win32/nasm-2.11.05-installer.exe​

安装过程如下图所示

C++ libcurl 库 实现http通讯_c++_06 C++ libcurl 库 实现http通讯_服务器_07 C++ libcurl 库 实现http通讯_perl_08 C++ libcurl 库 实现http通讯_http_09 C++ libcurl 库 实现http通讯_c++_10

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

C++ libcurl 库 实现http通讯_服务器_11

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

输出结果如下

C++ libcurl 库 实现http通讯_服务器_12

6) 生存Makefile 文件 ms\do_nasm

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

输出如下

C++ libcurl 库 实现http通讯_perl_13

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 ,现在去里面看看 是什么

C++ libcurl 库 实现http通讯_c++_14

7 编译curl/libcurl

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

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

C++ libcurl 库 实现http通讯_http_15

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

C++ libcurl 库 实现http通讯_c++_16

命令注释 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

C++ libcurl 库 实现http通讯_服务器_17 C++ libcurl 库 实现http通讯_代理服务器_18

C++ libcurl 库 实现http通讯_http_19

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

C++ libcurl 库 实现http通讯_c++_20

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

ps:整个步骤其实是转载的,不过楼主按照这个步骤最后确实成功了。自己懒得再来一遍截图了。

C++ libcurl 库 实现http通讯_服务器_21

其实最主要的还是libcurl.lib这个库,本身这个库是支持http的 但是不支持https。所以需要用的openssl,先安装了openssl,然后再编译libcurl,会把其编译进去,从而生成的新的libcurl可以支持https。极光推送用的就是https。