QT支持https網絡請求

Qt自帶的老版本OpenSSL1.0.x在今年(2019)就要結束LTS支持了,那麼從Qt5.12.4開始,Qt將啓用1.1.x,新版本帶來的TLS1.3,以前經典的名字叫libeay32.dll和ssleay32.dll,現在改名變成了libcrypto-1_1.dll 和libssl-1_1.dll

1. 下載安裝
windows版本下載地址:http://slproweb.com/products/Win32OpenSSL.html
根據自己工程對應版本32位或者64位,安裝後拷貝libcrypto-1_1.dll 和libssl-1_1.dll,64位叫libcrypto-1_1-x64.dll和libssl-1_1-x64.dll到自己的exe目錄下,OpenSSl安裝選項有一個是否拷貝到系統目錄的選項,勾上會自動拷貝到了C盤的系統目錄下面。程序會默認從系統目錄自動加載。如需移除OpenSSL,需要把系統目錄下的也手動刪除掉,64位下安裝32位的OpenSSL系統目錄C:\Windows\SysWOW64,安裝的64位的系統目錄爲C:\Windows\System32。

2. 查詢是否支持
查看當前Qt版本是否支持OpenSSL,Qt編譯使用的OpenSSL版本。當前使用的OpenSSl版本。只要編譯版本是1.1.1的。安裝的也使用1.1.1即可。後面的d、g版本號可不完全一致。使用版本比編譯版本高即可。

    bool bSupp = QSslSocket::supportsSsl();
    QString buildVersion = QSslSocket::sslLibraryBuildVersionString();
    QString version = QSslSocket::sslLibraryVersionString();
    qDebug() << bSupp << buildVersion << version << endl;

不支持時打印如下
false “OpenSSL 1.1.1d 10 Sep 2019” “”
支持openSSL時打印如下
true “OpenSSL 1.1.1d 10 Sep 2019” “OpenSSL 1.1.1g 21 Apr 2020”

查看當前網絡請求支持協議

QNetworkAccessManager *accessManager = new QNetworkAccessManager(this);
qDebug() << accessManager->supportedSchemes();

不支持https時顯示結果如下
(“ftp”, “file”, “qrc”, “http”, “data”)
支持https時顯示結果如下
(“ftp”, “file”, “qrc”, “http”, “https”, “data”)

同時會報錯顯示如下:
qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
found error … code: 99
TLS initialization failed

3. 使用方法
使用https請求時,代碼需要如下配置進行:

    QNetworkRequest request;

    // 發送https請求前準備工作;
    QSslConfiguration config;
    QSslConfiguration conf = request.sslConfiguration();
    conf.setPeerVerifyMode(QSslSocket::VerifyNone);
    conf.setProtocol(QSsl::TlsV1SslV3);
    request.setSslConfiguration(conf);
    
    request.setUrl(QUrl("https://gitee.com/"));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章