不使用SSL时出现QSslSocket错误

Pav*_*vel 11 ssl qt qsslsocket

我注意到我的两个Qt应用程序中的这个输出使用QNetworkRequest通过QNeworkRequest从外部加载一些数据:

QSslSocket: cannot resolve TLSv1_1_client_method
QSslSocket: cannot resolve TLSv1_2_client_method
QSslSocket: cannot resolve TLSv1_1_server_method
QSslSocket: cannot resolve TLSv1_2_server_method
QSslSocket: cannot resolve SSL_select_next_proto
QSslSocket: cannot resolve SSL_CTX_set_next_proto_select_cb
QSslSocket: cannot resolve SSL_get0_next_proto_negotiated
Run Code Online (Sandbox Code Playgroud)

导致出现这些警告的请求的一个示例是

QNetworkReply reply = m_nam->get(QNetworkRequest(QUrl("http://api.openweathermap.org/data/2.5/forecast?id=2835297&mode=xml")));
Run Code Online (Sandbox Code Playgroud)

我有理由相信任何查询都没有TLS/SSL,都是普通的HTTP.无论URL如何,消息始终在分派第一个请求后出现.我根本不打算使用SSL,代码中没有提到SSL,这意味着我不能以编程方式忽略警告.

我的设置是Windows 7 64位,MSVC2013和MinGW,Qt 5.3.2.无论使用何种编译器,都会显示消息.未安装OpenSSL或其他SSL开发库.

问题是:我如何摆脱这些警告?

use*_*419 18

这些只是在解析OpenSSL函数时从qWarning()调用.它不是试图调用这些函数,只是解决它们.调用未解析的函数会导致QSslSocket: cannot call unresolved function ...警告.

该警告是OpenSSL函数在运行时通过调用QSslSocket::supportsSsl()static 来解析的结果,该函数QNetworkAccessManager::supportedSchemesImplementation()返回支持的模式--- http并且,如果支持SSL https.

关于这些警告你几乎没有选择,

  1. 忽略它们,因为你无论如何都不想要或不需要SSL
  2. 重新编译Qt并-no-openssl传递给configure
  3. 发布OpenSSL以便功能得到解决并https变得可用 - 可能不是你想要的

  • 此外,您还可以通过设置环境变量来禁用这些消息QT_LOGGING_RULES = qt.network.ssl.warning = false (3认同)

jet*_*ton 5

可以禁用相关的警告消息 QLoggingCategory::setFilterRules("qt.network.ssl.w arning=false");