簡體   English   中英

QT HTTP獲取請求SSL錯誤

[英]QT HTTP Get Request SSL Error

我只是嘗試使用HTTP URL發送GET請求,我得到這兩個SSL錯誤:

>     qt.network.ssl: QSslSocket: cannot call unresolved function d2i_DHparams
>     qt.network.ssl: QSslSocket: cannot call unresolved function DH_free

我正在使用帶有QTCreator的Windows 10(QT v5.8),我知道默認情況下QT不會導入SSL庫。 但是,我發送HTTP請求而不是HTTPS,那么為什么我會收到SSL錯誤?

以下是產生錯誤的代碼段:

void MainWindow::sendGetRequest(QString& url)
{
    QNetworkAccessManager networkManager;
    QNetworkRequest request;

    QUrl httpRequest(url);

    request.setUrl(httpRequest);
    currentReply = networkManager.get(request);
    ui->label_2->setText("Request Sent...");

    connect(&networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onGetRequestResult(QNetworkReply*)));
}

void MainWindow::onGetRequestResult(QNetworkReply * reply)
{
    if (reply->error() != QNetworkReply::NoError) {
        ui->label_2->setText("Get Request Error!");
        return;
    }

    QString data = (QString) reply->readAll();
    qDebug() << data;

}

在標簽更改為Request Sent... ,將拋出錯誤並且永遠不會調用插槽onGetRequestResult()

此外,我已經下載了兩個SSL二進制文件,但這並沒有改變任何東西,有沒有辦法為GET請求禁用SSL,因為我不需要使用它。

謝謝!

我也遇到了同樣的問題。 這是適合我的解決方案。

  1. 從此站點下載安裝包
    http://slproweb.com/products/Win32OpenSSL.html
  2. 將其安裝到任何位置。
  3. 將OpenSSL DLL復制到OpenSSL二進制文件(\\ bin)目錄。
  4. 將libeay32.dll,libssl32.dll和ssleay32.dll從\\ bin文件夾復制到QtNetwork4.dll或QtNetworkd4.dll所在的位置。

我希望這有幫助! :)

是一些QT窗口的bug,如果你使用qt mingw gcc 32bit,復制到你的Windows應用程序可執行位置ssleay32.dll和libeay32.dll。 在我的情況下是:Qt \\ Qt5.8.0 \\ Tools \\ mingw530_32 \\ opt \\ bin \\ ssleay32.dll Qt \\ Qt5.8.0 \\ Tools \\ mingw530_32 \\ opt \\ bin \\ libeay32.dll

networkManager在中聲明

 `MainWindow::sendGetRequest()`,

執行后

 `sendGetRequest()`, 

networkManager被破壞了,然后就是了

finished(QNetworkReply*)

信號不會發出。

您應該將networkManager聲明為MainWindow的成員。 或者考慮將其存儲在堆中

auto networkManger = new NetworkManager(this) ),

如果它只創建一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM