我的目标是QNetworkRequest
使用QNetworkAccessManager
.
OpenSSL 1.1.0 不适用于 Qt 5.8!在编辑 2 中查找安装解决方案!
第一次尝试:获取 ssleay32.lib 和 libeay32.lib 并将它们复制到调试和发布文件夹中。不要工作。
第二次尝试:(因为是废话而删除)但它不再起作用了。
代码(适用于普通 http):
QUrl url = QUrl(name);
data.clear();
QNetworkRequest *request = new QNetworkRequest(url);
request->setRawHeader("User-Agent", userAgent);
QSslConfiguration sslConfiguration(QSslConfiguration::defaultConfiguration());
request->setSslConfiguration(sslConfiguration);
reply = webCtrl->get(*request);
connect(webCtrl, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
connect(reply, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
connect(reply, SIGNAL(finished()), this, SLOT(onReplyFinished()));
错误信息:
qt.network.ssl: QSslSocket: cannot call unresolved function d2i_DHparams
qt.network.ssl: QSslSocket: cannot call unresolved function DH_free
qt.network.ssl: QSslSocket: cannot call unresolved function d2i_DHparams
qt.network.ssl: QSslSocket: cannot call unresolved function DH_free
qt.network.ssl: QSslSocket: cannot call unresolved function d2i_DHparams
qt.network.ssl: QSslSocket: cannot call unresolved function DH_free
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
Error creating SSL context ()
编辑 1:
我发现这个Artikel 和 OpenSSL 1.1.0 将与 Qt 5.10 一起使用,但不适用于我正在使用的 Qt 5.8。在这篇文章中,我找到了QSslSocket::sslLibraryBuildVersionString()
命令,我需要 OpenSSL 版本:OpenSSL 1.0.2h 3 May 2016
。
稍后我将检查另一个 OpenSSL 版本并编辑这篇文章是否正常工作。
编辑 2:
下载OpenSSL 1.0.2h 3 May 2016
并安装 7zip 和 Perl。提取 openSSL 文件夹并按照INSTALL.W64
. 转到文件夹并将和bin
复制到应用程序文件夹并将文件重命名为和。谢谢@[Max Go]。libeay32-xxx.dll
ssleay32-xxx.dll
libeay32.dll
ssleay32.dll
现在 SSL 连接终于可以工作了,但是当我关闭应用程序并且在运行时使用了 Web 连接时,我收到了一条错误消息。
onlineTest.exe 中 0x000000007772D1CB (ntdll.dll) 的异常:0xC0000005:访问冲突读取位置 0x0000000000000074。
VS2015 调试窗口“mem.c”第 443 行:
free_debug_func 0x0000000000000000 void(*)(void *, int)
free_func 0x000007fee778b1ba {libeay32.dll!free} void(*)(void *)
str 0x0000000002500cf0 void *
编辑3: 我忘了编译-d debug .dll。只需将编译器模式更改为 Debug,生成 Debug .dll,如果需要不带 -d 的情况下重命名,然后将 debug .dll 复制到 debug 文件夹,将普通 .dll 复制到 release 文件夹。