0

我一直在尝试使用 PySide 和 QWebView 实现浏览器。但是浏览器不会加载 www.facebook.com。我可以加载其他 https 网站,例如 google,所以我猜 SSL 工作正常。使用http://code.google.com/p/foobrowser/或 PySide 附带的示例浏览器时,同样的问题仍然存在。问题是什么?

4

3 回答 3

0

有同样的问题 - 在我的情况下,它与 ssl 错误有关。处理sslErrors信号解决了这个问题:

m_view = new QWebView(parent);
connect(
  m_view->page()->networkAccessManager(),
  SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError> & )),
  this, 
  SLOT(sslErrorHandler(QNetworkReply*, const QList<QSslError> & ))
);

和插槽:

void myClass::sslErrorHandler(QNetworkReply* qnr, const QList<QSslError> & errlist)
{
    qnr->ignoreSslErrors();
}
于 2013-07-09T15:23:48.337 回答
0

POODLE漏洞被发现后,一些网站放弃了 SSLv3。

我在 Windows 8.1 上的 PySide (1.1.1) 版本具有PySide.QtNetwork.QSsl.SslProtocol.SslV3默认协议。

要解决此问题,您需要更改QSslConfigurationNetworkAccessManager使用 TLS。

from PySide.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply, QSslConfiguration, QSsl


class HtmlFrame(QFrame):
  def __init__(self, parent=None):
    QFrame.__init__(self, parent)

    self.webview = QWebView()

    # Developer extras settings to debug Webview
    # QWebSettings.globalSettings().setAttribute(QWebSettings.WebAttribute.DeveloperExtrasEnabled, True)

    self._network_manager = FNetworkManager()
    self.webview.page().setNetworkAccessManager(self._network_manager)
    url = "https://www.facebook.com"
    self.webview.load(QUrl(url))

class FNetworkManager(QNetworkAccessManager):
  def __init__(self):
    QNetworkAccessManager.__init__(self)
    # bind a custom virtual function to createRequest
    self.createRequest = self._create_request

  def _create_request(self, operation, request, data):
    ssl_config = QSslConfiguration.defaultConfiguration()
    ssl_config.setProtocol(QSsl.TlsV1)
    request.setSslConfiguration(ssl_config)

    reply = QNetworkAccessManager.createRequest(self, operation, request, data)
    return reply

归功于https://github.com/intericho/https://github.com/intericho/path-of-a-pyqter/

于 2014-12-17T13:13:07.373 回答
-1

在 PySide qwebview 中加载 Facebook 是没有问题的,可能是你平台的问题。

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

import sys
import platform
import PySide
from PySide.QtCore import QUrl
from PySide.QtGui import QApplication
from PySide.QtWebKit import QWebView

print(PySide.__version__) # output: 1.1.1
print(PySide.QtCore.__version__) # output: 4.8.3
print(platform.platform()) # output: Linux-3.5.0-36-generic-x86_64-with-Ubuntu-12.10-quantal

app = QApplication(sys.argv)
web = QWebView()
web.load(QUrl("https://www.facebook.com"))
web.show()
sys.exit(app.exec_())

高温高压

于 2013-07-09T18:03:35.057 回答