Qt 是支持 SSL的,但是由于某些法律和政策因素,QT的開發(fā)包里并沒有集成openSSL。QT采用兩種方式調用openSSL,默認方式是動態(tài)加載openSSL的 DLL。
在Windows系統(tǒng)上默認沒有openSSL,需要自己安裝。
可以在這里下載源代碼,自己編譯
http://www.openssl.org/source/
也可以在這里下載編譯好的版本,直接安裝
http://www.slproweb.com/products/Win32OpenSSL.html
如果要靜態(tài)鏈接ssl,那就要自己重新編譯QT才行,首先設置環(huán)境變量 OPENSSL_LIBS,指向你的openSSL的lib目錄,然后執(zhí)行configure的時候使用以下參數(shù)
configure -openssl-linked
使用方法和簡單和普通的 http請求沒什么不同。
QUrl url(http://code.google.com");
QHttp *http = new QHttp();
http->setHost(url.host(), QHttp::ConnectionModeHttps, url.port());
QFile *file = new QFile("index.htm");
file->open(QIODevice::WriteOnly)
int httpGetId = http->get(path, file);
由于QHttp是異步調用,你需要連接幾個signal來獲取下載進度。
在S60平臺,以上代碼也是可以運行的,需要注意的是在 Qt 4.6 beta版本里我懷疑有個bug,qt會在s60上試圖去加載 ssleay32.dll,但是在s60上openSSL的DLL名字是 libssl.dll。
這個問題已經在最新的 QT 4.6 正式版本里修復了,請更新到最新的QT.
另外,如果以上代碼在 S60上運行,這個 index.htm文件會被創(chuàng)建在程序的私有目錄里,這個目錄是文件管理器看不到的,所以要改成 類似 c:\\index.htm的名字,好用來驗證下載是否正確。
現(xiàn)在的 QT 其實并不推薦繼續(xù)使用 QHttp了,應該用 QNetworkAccessManager,這是一個更先進的網絡連接服務,其行為和你的瀏覽器基本一致,包括了代理和緩沖的支持,所以這也是QT webkit使用的連接方式。