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