2017-01-07 78 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