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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章