Jam*_*ton 12 c++ ssl qt qt4 qtwebkit
使用Visual C++ 2008 SP1在Windows 7上干净安装Qt SDK 1.1.4; 我正在使用Qt Creator.为什么这段代码没有加载某些网页?
#include <QtGui/QApplication>
#include <QtWebKit/QWebView>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWebView b;
b.load(QUrl("https://gmail.com")); // doesn't work
//b.load(QUrl("https://accounts.google.com")); // works
//b.load(QUrl("https://google.com")); // doesn't work
//b.load(QUrl("https://www.google.com")); // works
b.show();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
为什么有些网址不起作用,有些网址不起作用?
我认为google.com/www.google.com特别有说服力; google.com通常会重定向到www.google.com.gmail.com正在重定向到accounts.google.com.WebKit不允许安全页面重定向吗?如果是这样,如何解决?
顺便说一下,Qt SDK 1.1.4似乎包含了OpenSSL; 我注意到它出现在C:\ QtSDK\Desktop\Qt\4.7.4\msvc2008\bin\ssleay32.dll.还要注意一些页面似乎有效,而不是其他页面.
编辑: 另外两个网址:
b.load(QUrl("https://support.motionview3d.com/help/_media/images/directory.png")); // doesn't work
b.load(QUrl("https://mail.google.com")); // works
Run Code Online (Sandbox Code Playgroud)
同样,这两种方法在其他Web浏览器中都可以正常工作.
Arn*_*nce 18
您可能会收到可以在插槽中处理的SSL错误.虽然不是最佳的最终解决方案,但您可以使用该插槽忽略所有SSL错误.我通过子类化做到了这一点 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
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
的main.cpp"
#include <QApplication>
#include "WebView.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
WebView w;
w.show();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
运行它应该产生这样的调试输出:
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"
...
Run Code Online (Sandbox Code Playgroud)
在您的最终程序中,您当然希望正确处理SSL错误:)
| 归档时间: |
|
| 查看次数: |
13296 次 |
| 最近记录: |