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。
3 安裝OpenSsl開發包
4 安裝perl程序





5 安裝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.