一、簡述
在使用Qt發送HTTP請求中一般使用的鏈接都是http://前綴,而有的服務器支持 https://前綴的鏈接,而Qt本身是支持https的,但是https訪問需要用到SSL認證,而QT默認是不支持SSL認證,所以在Qt中使用https需要進行SSL認證。實現非常容易,簡單幾步即可完成。
二、HTTPS和HTTP的區別
1、簡介
超文本傳輸協議HTTP被用於在Web瀏覽器和網站服務器之間傳遞信息。HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息,因此HTTP協議不適合傳輸一些敏感信息,比如信用卡號、密碼等。
為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議HTTPS。為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證服務器的身份,並為瀏覽器和服務器之間的通信加密。
2、區別
https協議需要到ca申請證書,一般免費證書很少,需要交費。
http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。
http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
三、如何進行SSL認證
1、首先,因為需要Openssl支持,使用SSL進行認證,所以需要對應的庫文件 libeay32.dll和ssleay32.dll。需要下載libeay32.dll 和 ssleay32.dll兩個庫文件,將這兩個庫文件拷貝到程序生成目錄下(即生成exe的同級目錄)或者拷貝到QtNetwork模塊的庫文件目錄中。
2、在發送HTTP請求之前加上如下代碼
void onSendHttpsRequest(QString url) { QNetworkAccessManager* pManager = new QNetworkAccessManager(this); QNetworkRequest request; // 發送https請求前准備工作; QSslConfiguration config; QSslConfiguration conf = request.sslConfiguration(); conf.setPeerVerifyMode(QSslSocket::VerifyNone); conf.setProtocol(QSsl::TlsV1SslV3); request.setSslConfiguration(conf); request.setUrl(QUrl(url)); // "https://www.temp.com" QNetworkReply *pReply = pManager->post(request, bytePost); connect(pReply , SIGNAL(finished()) , this , SLOT(onFinished()); connect(pReply , SIGNAL(error(QNetworkReply::NetworkError)) , this , SLOT(onError(QNetworkReply::NetworkError))); } // 請求完成; void onFinished() { QNetworkReply *pReplay = qobject_cast<QNetworkReply*>(sender()); // 保存接受的數據; QByteArray replyContent = pReplay->readAll(); } // 請求失敗; void onError(QNetworkReply::NetworkError errorCode) { QNetworkReply *pReplay = qobject_cast<QNetworkReply*>(sender()); // 輸出錯誤碼及錯誤信息; qDebug()<< errorCode; qDebug()<< pReplay->errorString(); }
關於兩個庫文件下載
1、在 http://slproweb.com/products/Win32OpenSSL.html 中下載 Win32 OpenSSL進行安裝,將bin目錄下面的庫拷貝出來放到生成程序exe同級目錄下即可。
2、 libeay32.dll 、 ssleay32.dll動態鏈接庫 直接在我的資源中進行下載。
http://blog.csdn.net/goforwardtostep/article/details/53588961