Qt 之 使用 https發送 HTTP請求(使用OPENSSL庫)


一、簡述

在使用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.dllssleay32.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM