gpt4 book ai didi

c++ - QWebView/Qt WebKit 不会打开一些 SSL 页面;不允许重定向?

转载 作者:IT老高 更新时间:2023-10-28 23:14:51 35 4
gpt4 key购买 nike

在带有 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();
}

为什么有些 URL 不起作用,而有些却起作用?

我认为 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

同样,这两者在其他网络浏览器中都可以正常工作。

最佳答案

您可能会遇到 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

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();
}

ma​​in.cpp"

#include <QApplication>
#include "WebView.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
WebView w;
w.show();
return a.exec();
}

运行它应该会产生如下调试输出:

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"
...

在您的最终程序中,您当然希望正确处理 SSL 错误 :)

关于c++ - QWebView/Qt WebKit 不会打开一些 SSL 页面;不允许重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8362506/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com