QT HTTP获取请求SSL错误

时间:2017-01-07 00:56:10

标签: c++ qt ssl

我只是尝试使用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,因为我不需要使用它。

谢谢!

3 个答案:

答案 0 :(得分: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所在的位置。
  5. 我希望这有帮助! :)

答案 1 :(得分:0)

是否有一些QT窗口错误,如果您使用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

答案 2 :(得分:-1)

networkManager

中声明
 `MainWindow::sendGetRequest()`,
执行

 `sendGetRequest()`, 

networkManager被破坏,然后就是

finished(QNetworkReply*)

信号不会发出。

您应该将networkManager声明为MainWindow的成员。 或者考虑将其存储在堆

auto networkManger = new NetworkManager(this)),

如果只创建一次。