2017-01-07 3 views
3

ich einfach versuche, eine GET-Anforderung mit HTTP-URL zu senden, und ich bin diese zwei SSL-Fehler bekommen:QT HTTP GET-Request SSL-Fehler

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

ich Windows 10 mit QtCreator (QT v5.8) bin mit und ich bin mir bewusst, dass die SSL-Bibliotheken standardmäßig nicht von QT importiert werden. Ich sende jedoch eine HTTP-Anfrage und nicht HTTPS, also warum bekomme ich SSL-Fehler?

Hier ist der Code-Schnipsel, die einen Fehler erzeugt:

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; 

} 

Gleich nach dem Label Änderungen Request Sent... die Fehler und den Schlitz geworfen werden onGetRequestResult() nie aufgerufen.

Auch habe ich die zwei SSL-Binärdateien heruntergeladen, aber das ändert nichts und gibt es eine Möglichkeit, SSL für GET-Anfrage zu deaktivieren, da ich es nicht verwenden muss.

Danke!

+0

Bearbeiten Sie Ihre Frage, indem Sie Ihren vorheriger Kommentar – eyllanesc

+0

Es gibt wahrscheinlich eine Umleitung zu https in der Antwort der HTTP-Anfrage und der HTTP-Stack von Qt folgt ihm und versucht, die Website über https zu erreichen, wie vom Server bestellt. –

+0

Angenommen, die Antwort läuft über SSL, aber wie behebe ich diese Fehler? Wenn ich 'curl -X Get" url "verwende, funktioniert es gut. Allerdings habe ich nicht das Privileg, "curl" unter Windows 10 zu verwenden. –

Antwort

0

Ich hatte auch das gleiche Problem. Hier ist die Lösung, die für mich funktioniert hat.

  1. Laden Sie das Installationspaket von dieser Seite
    http://slproweb.com/products/Win32OpenSSL.html
  2. es installieren zu jedem beliebigen Ort.
  3. Kopieren Sie die OpenSSL-DLLs in das Verzeichnis OpenSSL-Binärdateien (\ bin).
  4. Kopieren Sie die Dateien libeay32.dll, libssl32.dll und ssleay32.dll aus dem Ordner \ bin an die Stelle, an der sich Ihre Datei QtNetwork4.dll oder QtNetworkd4.dll befindet.

Ich hoffe, das hilft! :)

-1

networkManager in

`MainWindow::sendGetRequest()`, 

nach der Ausführung von

`sendGetRequest()`, 

networkManager zerstört erklärt wird, dann ist es

finished(QNetworkReply*)

Signal nicht emittiert würde.

sollten Sie networkManager als Mitglied von MainWindow deklarieren. Oder betrachten wir speichern sie in Haufen

(auto networkManger = new NetworkManager(this)),

wenn es nur einmal erstellt wird.

0

Ist einige QT-Windows-Fehler, wenn Sie qt mingw gcc 32bit verwenden, kopieren Sie die ausführbare Datei Ihrer Windows-Anwendung ssleay32.dll und libeay32.dll. In meinem Fall ist: Qt \ Qt5.8.0 \ Tools \ mingw530_32 \ opt \ bin \ ssleay32.dll Qt \ Qt5.8.0 \ Tools \ mingw530_32 \ opt \ bin \ libeay32.dll