无法从QNetworkAccessManager访问Ssl错误列表
Unable to access Ssl error list from QNetworkAccessManager
我正在进行一个项目,试图通过REST请求向我们的Web服务发送请求。首先,我只将finished(QNetworkReply*)
信号连接到插槽,但由于ssl问题,它从未完成,我也尝试连接sslErrors(QNetworkReply*, const QList<QSslError>&)
插槽,因为请求是https。
connect(&_accessManager, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError>&)),
this, SLOT(printSslErrors(QNetworkReply*, const QList<QSslError>&)));
然后在我的打印功能中,我无法以任何方式访问错误列表。
void AssetManager::printSslErrors(QNetworkReply *reply, const QList<QSslError>& errors) {
...
}
我试过了:
const QSslError test = errors.at(0); // error on 'test'
QSslError test = errors.at(0); // error on 'test'
或
foreach(QSslError error, errors) {
qDebug() << error.errorString(); // error on 'errors'
}
for(int i = 0; i < errors.count(); i++) {
qDebug() << errors.at(i).errorString(); // error on 'errors'
}
结果是:
错误C2079:"test"使用了未定义的类"QSslError"
错误C2440:"initializing":无法从"const QSslError"转换为"int"
或
错误C2027:使用未定义的类型"QSslError"
错误C2228:".toString"的左侧必须具有类/结构/联合
此外,IntelliSense在errors
或test
下面加上消息:
IntelliSense:不允许使用不完整的类型
(注意,当我做errors.count()
时,它没有抱怨)
我在头文件中包含<QSslError>
。。。
我一直在努力处理sslError信号,几周前我甚至无法将信号连接到任何东西,因为它"不存在"。我是不是缺了一个模块什么的?
感谢您的帮助
编辑:
仍然得到错误:
对象::connect:没有这样的信号QNetworkAccessManager::sslErrors(QNetworkReply*,const QList&)
此外,无法检查我是否有Ssl
qDebug() << QSslSocket::supportsSsl();
因为QSslSocket是未定义的,即使它包含在内。我一定是错过了什么重要的东西,对吧?我必须安装一些东西吗?我完全迷失在这里:(
确保您的Qt是在启用SSL支持的情况下构建的(并且可以在PATH上找到OpenSSL dll)。
如果你自己构建了Qt(我也经常忘记这些配置选项),或者如果你使用的是linux发行版的Qt,而它恰好是在没有SSL的情况下构建的(尽管我从未见过),这通常只是一个问题。
编辑:如果你需要在windows上构建它(由于某种原因无法使用预构建的二进制文件):
-
下载OpenSSL和Qt并将其解压缩到同一文件夹中。例如:
c:rootopenssl-1.0.1
c:rootqt-everywhere-opensource-src-4.8.1
-
启动Visual Studio命令行并运行c:\root\openssl-1.0.1\ms\32all.bat,等待构建
-
cd插入c:\root\qt-everywhere-opensource-src-4.8.1并运行
configure.exe -platform win32-msvc2010 -openssl -I c:rootopenssl-1.0.1include
-
确保Qt检测到并启用了OpenSSL支持(configure打印出所有内容的列表)
- 运行nmake来构建Qt本身
(针对VS的其他版本进行适当修改)
我只是遇到了同样的错误,想知道为什么信号无效。如上所述,这确实是因为未启用OpenSSL支持。参见QNetworkAccessManager.h:144:146:
#ifndef QT_NO_OPENSSL
void sslErrors(QNetworkReply *reply, const QList<QSslError> &errors);
#endif
即,仅当编译Qt时OpenSSL支持到位时才声明该信号。
- 如何使用QWebEngineView忽略SSL证书错误
- CPPRestSdk给出错误SSL错误:WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA
- 成功完成TLS握手后,服务器关闭时出现错误的SSL例程:SSL3_GET_RECORD:错误的版本号
- Qt 错误消息"qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed"
- 使用 Boost ASIO 和 SSL 时出现"Wrong Version Number"错误 (C++)
- CMAKE 目标链接打开 SSL 错误
- 尝试关闭 SSL 套接字时使用升压 asio 1.64 的分段错误 (SIGSEGV)
- 致命错误:openssl/ssl.h:没有这样的文件或目录
- Arduino ESP8266HTTPClient:握手失败(SSL 错误 40)
- QnetWorkAccessManager在ARCH上给出了SSL错误
- libgit2:git_clone() 失败并出现"failed to create ssl object"错误
- 为什么这C++ASIO,当执行HTTP / SSL请求时,BEAST服务器会进入错误状态
- Linux/QT-错误创建SSL上下文(错误:140A90C4 ..)
- vcpkg 安装失败,并显示"SSL 连接错误"
- 提升/ASIO/SSL 抛出"undefined reference"错误
- c++ Http 请求 SSL 错误
- 运行使用gSOAP创建的web服务客户端时发生SSL错误
- 应用程序中C++ SSL 错误SSL_ERROR_SYSCALL
- 无法从QNetworkAccessManager访问Ssl错误列表
- Qt SSl错误(QSslSocket:无法解析TLSv1_1_client_method)