我有一个基于Qt QWebKit的应用程序,需要使用HTTPS与网页通信。我已经下载了QtSDK以及OpenSSL二进制文件(from here)。
我的问题在于部署我的应用程序。我已将相关的Qt DLL文件以及相关的OpenSSL DLL文件(libeay32.dll
和ssleay32.dll
)复制到我的应用程序目录中,但是当我尝试从我的应用程序中访问HTTPS网页时,它失败了!应用程序不会崩溃,但页面是空白的。常规HTTP页面工作得很好。
很明显,我在使用我的应用程序分发OpenSSL时出现错误,我只是不确定我哪里出错了。
我真的不想将OpenSSL安装程序与我的应用程序捆绑在一起。
答案 0 :(得分:5)
大家好,读过这个试图调试类似问题的人。问题是由Shining Light Productions分发的OpenSSL DLL二进制文件要求Visual C ++可再发行组件正常运行。
要使用您的应用程序分发OpenSSL DLL而不必分发Visual C ++ Redistributables,您可以使用MinGW自行编译OpenSSL。有关使用MinGW编译OpenSSL的说明包含在OpenSSL源代码分发中。
如果这样做,您可能需要将MinGW DLL与您的应用程序一起分发。这对我来说不是问题,因为我首先用Qt应用程序编译了MinGW。
答案 1 :(得分:2)
可以尝试忽略ssl证书吗?
标题文件:
void sslErrors(QNetworkReply*,const QList<QSslError> &errors);
构造函数:
connect(&qnam, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
this, SLOT(sslErrors(QNetworkReply*,QList<QSslError>)));
方法定义:
void HttpWindow::sslErrors(QNetworkReply *reply, const QList<QSslError> &errors)
{
QString errorString;
foreach (const QSslError &error, errors) {
if (!errorString.isEmpty())
errorString += ", ";
errorString += error.errorString();
}
if (QMessageBox::warning(this, tr("HTTP"),
tr("One or more SSL errors has occurred: %1").arg(errorString),
QMessageBox::Ignore | QMessageBox::Abort) == QMessageBox::Ignore) {
reply->ignoreSslErrors();
}
}
有关详细信息,请查看您的QT HTTP示例。