0

PySide と QWebView を使用してブラウザーを実装しようとしています。ただし、ブラウザは www.facebook.com をロードしません。Google などの他の https Web サイトを読み込むことができるので、SSL は問題なく機能していると思います。http://code.google.com/p/foobrowser/または PySide に含まれるサンプル ブラウザを使用すると、同じ問題が発生します。何が問題ですか?

4

3 に答える 3

0

POODLEの脆弱性が発見された後、一部のサイトで SSLv3 が削除されました。

私のバージョンの PySide (1.1.1) は、Windows 8.1 でPySide.QtNetwork.QSsl.SslProtocol.SslV3、既定のプロトコルとして使用されています。

QSslConfigurationこの問題を解決するには、 のNetworkAccessManagerを 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/integricho/およびhttps://github.com/integricho/path-of-a-pyqter/へのクレジット

于 2014-12-17T13:13:07.373 に答える
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 に答える