【问题标题】:QSslSocket: cannot call unresolved function SSLv23_client_methodQSslSocket:无法调用未解析的函数 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 的响应。

【问题讨论】:

    标签: qt qnetworkaccessmanager qnetworkreply qnetworkrequest qsslsocket


    【解决方案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
    猜你喜欢
    • 2015-08-09
    • 2022-10-26
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2014-11-30
    • 1970-01-01
    • 2012-07-25
    相关资源
    最近更新 更多