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.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