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的主要内容,如果未能解决你的问题,请参考以下文章
qt.network.ssl: QSslSocket Qt支持SSL https
如何处理 QSslSocket:无法解决 TLSv1_1_client_method 错误