Clean install of Qt SDK 1.1.4 on Windows 7 with Visual C++ 2008 SP1; I\'m using Qt Creator. Why does this code not load some web pages?
#include
I usually use the "Arnold Spence"s solution but sometimes that wont work.
in that case just change the default Ssl configuration like this
QSslConfiguration sslconf = QSslConfiguration::defaultConfiguration();
QList<QSslCertificate> cert_list = sslconf.caCertificates();
QList<QSslCertificate> cert_new = QSslCertificate::fromData("CaCertificates");
cert_list += cert_new;
sslconf.setCaCertificates(cert_list);
sslconf.setProtocol(QSsl::AnyProtocol);
QSslConfiguration::setDefaultConfiguration(sslconf);
Here we altered the configuration for the entire application .
I recommend you handle the sslErrors signal too ..
You are probably getting SSL errors which you can handle in a slot. Although not the best final solution, you can use the slot to ignore all SSL errors. I did this by subclassing QWebView
:
qwebview.h:
#ifndef WEBVIEW_H
#define WEBVIEW_H
#include <QWebView>
class WebView : public QWebView
{
Q_OBJECT
public:
WebView(QWidget *parent = 0);
private slots:
void handleSslErrors(QNetworkReply* reply, const QList<QSslError> &errors);
};
#endif // WEBVIEW_H
qwebview.cpp:
#include "webview.h"
#include <QNetworkReply>
#include <QtDebug>
#include <QSslError>
WebView::WebView(QWidget *parent) :
QWebView(parent)
{
load(QUrl("https://gmail.com"));
connect(page()->networkAccessManager(),
SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError> & )),
this,
SLOT(handleSslErrors(QNetworkReply*, const QList<QSslError> & )));
}
void WebView::handleSslErrors(QNetworkReply* reply, const QList<QSslError> &errors)
{
qDebug() << "handleSslErrors: ";
foreach (QSslError e, errors)
{
qDebug() << "ssl error: " << e;
}
reply->ignoreSslErrors();
}
main.cpp"
#include <QApplication>
#include "WebView.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
WebView w;
w.show();
return a.exec();
}
Running this should produce debug output like this:
handleSslErrors:
ssl error: "The host name did not match any of the valid hosts for this certificate"
ssl error: "No error"
ssl error: "No error"
...
In your final program, you will of course want to handle SSL errors properly :)