QSslSocket:无法调用未解析的函数 SSLv23_client_method

Posted

技术标签:

【中文标题】QSslSocket:无法调用未解析的函数 SSLv23_client_method【英文标题】:QSslSocket: cannot call unresolved function SSLv23_client_method 【发布时间】:2017-02-05 12:38:27 【问题描述】:

我正在尝试调用 http 和 https 并尝试解析响应。我收到了对 http 调用的响应,但对于 https 调用,我收到了这个错误

QSslSocket: cannot call unresolved function SSLv23_client_method
QSslSocket: cannot call unresolved function SSL_CTX_new
QSslSocket: cannot call unresolved function SSL_library_init
QSslSocket: cannot call unresolved function ERR_get_error




void MyClass::on_push_button_clicked()

QString address = "New York";

QNetworkAccessManager *qnam__get_address=NULL;
QNetworkRequest request;


QString myurl;
//myurl = "http://google.com/complete/search?output=toolbar&q="+address;
myurl = "https://maps.googleapis.com/maps/api/geocode/xml?address=New York&key=google api key";
QUrl url(myurl);
request.setUrl(url);
qDebug() << url;
qnam__get_address = new QNetworkAccessManager(this);
if(qnam__get_address) 
    QObject::connect(qnam__get_address, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), this, SLOT(onSslError(QNetworkReply*, QList<QSslError>)));
    QObject::connect(qnam__get_address, SIGNAL(finished(QNetworkReply*)),this, SLOT(on_push_button_clicked_response(QNetworkReply*)));
    reply = qnam__get_address->get(request);

return;

void MyClass::onSslError(QNetworkReply* r, QList<QSslError> errors) 

r->ignoreSslErrors();


void MyClass::on_push_button_clicked_response(QNetworkReply* reply)

// no error received?
if (reply->error() == QNetworkReply::NoError)

    qDebug()<<"MyClass:: got the response";

// Some http error received
else

    qDebug() << ".......error";

if(reply)

    reply->deleteLater();

return;

谁能告诉我如何解决这个错误? 我到底需要做什么?

我还观察到一种奇怪的行为,当我将 libeay32.dll 和 ssleay32.dll 文件与 .exe 文件一起保存时,我得到了 https 的响应,但没有得到 http 的响应。

【问题讨论】:

【参考方案1】:

愚蠢的高度............ 我安装了 OpenSSL,它解决了这个问题。所以现在如果我尝试运行/调试它,我不会收到任何错误。

我找到了这些 URL 不起作用的原因。 //myurl = "http://google.com:80/complete/search?output=toolbar&q="+地址; myurl = "https://maps.googleapis.com:443/maps/api/geocode/xml?address=New York&key=google api 密钥"; 添加端口后,我得到了响应。

【讨论】:

我遇到了完全相同的问题。但是,我是 devOPs 工程师,所以我必须让它在用户机器上工作,而不仅仅是开发人员环境。您可以在修复程序上发布的任何其他信息都会为我节省一些时间,我将不胜感激。与此同时,我将调查给出的内容并报告我的发现。谢谢sk110。 我知道有点晚了。尝试在 .exe 文件所在的同一目录中添加以下 dll,它应该可以解决问题。 1. ssleay32.dll 2. ssleay32MD.dll 3. ssleay32.dll 4. ssleay32MD.dll 我修复它的方法是在另一台没有问题的 Windows 机器上运行 Idependency walker。 Dependency Walkder 发现了另一个由 Intel 构建的 sleay dll。我在我的安装程序中用工作机器中的这些 dll 替换了我的 sleay dll,问题就消失了。我希望这有点道理。 :D

以上是关于QSslSocket:无法调用未解析的函数 SSLv23_client_method的主要内容,如果未能解决你的问题,请参考以下文章

不使用 SSL 时出现 QSslSocket 错误

qt.network.ssl: QSslSocket Qt支持SSL https

如何处理 QSslSocket:无法解决 TLSv1_1_client_method 错误

qt查看是否支持SSL

QSslSocket 等待数据时超时(但 QTcpSocket 不会)

将现有的 QTcpSocket 变形为 QSslSocket