2017-01-07 76 views
3

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

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

我使用Windows 10 QTCreator(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,因爲我不需要使用它。

謝謝!

+0

編輯您的加入您的問題先前的評論。 – eyllanesc

+0

在HTTP請求的響應中可能會重定向到https,並且來自Qt的HTTP堆棧正在跟隨它並嘗試按服務器的命令通過https訪問該站點。 –

+0

我們假設響應正在經歷SSL,但是我仍然如何解決這些錯誤?如果我使用'curl -X獲取「url」'它工作得很好。但是,我沒有在Windows 10上使用'curl'的特權。 –

回答

0

我也遇到了同樣的問題。這是爲我工作的解決方案。

  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所在的位置。

我希望這有助於! :)

-1

networkManager聲明中

`MainWindow::sendGetRequest()`, 

`sendGetRequest()`, 

networkManager執行之後被破壞,那麼它不會發出

finished(QNetworkReply*)

信號。

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

auto networkManger = new NetworkManager(this)),

如果只是創建一次。

0

是一些QT windows的bug,如果你用qt mingw gcc 32bit,拷貝到你的windows應用程序可執行文件位置ssleay32.dll和libeay32.dll。在我的情況是: Qt的\ Qt5.8.0 \工具\ mingw530_32 \選擇\ BIN \ ssleay32.dll 的Qt \ Qt5.8.0 \工具\ mingw530_32 \選擇\ BIN \的libeay32.dll