Skip to content

Instantly share code, notes, and snippets.

@rafaelcgo
Last active August 29, 2015 14:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rafaelcgo/c07a28a35f6e7166d465 to your computer and use it in GitHub Desktop.
Save rafaelcgo/c07a28a35f6e7166d465 to your computer and use it in GitHub Desktop.
PySide and SSL error
_ssl_errors never gets called, but _request_finished tells me it was a "SSL handshake failed" error.. No clue what to do!
2014-12-16 21:47:16,786 - main.html_frame - INFO - [NetworkManager] [_request_finished] url PySide.QtCore.QUrl('https://graph.facebook.com/oauth/authorize?client_id=459705897416958&redirect_uri=http://app.fottorama.com.br/sign_up?totem_tid=090010012&scope=publish_stream,user_photos,email&display=page')
2014-12-16 21:47:16,786 - main.html_frame - INFO - [NetworkManager] [_request_finished] PySide.QtNetwork.QNetworkReply.NetworkError.SslHandshakeFailedError
2014-12-16 21:47:16,786 - main.html_frame - INFO - [NetworkManager] [_request_finished] SSL handshake failed
# -*- coding: utf-8 -*-
from PySide.QtCore import *
from PySide.QtGui import *
from PySide.QtWebKit import *
from PySide.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
import urllib2
import logging
import json
import socket
###############################################################################################
###############################################################################################
class HtmlFrame(QFrame):
tagRead = Signal(list)
restartOperation = Signal()
def __init__(self, http_url, totem_id, parent=None):
QFrame.__init__(self, parent)
# get logger
self.logger = logging.getLogger("main.%s" % __name__)
self.webview = QWebView()
print("STARTING WEBVIEW")
self._network_manager = NetworkManager()
self.webview.page().setNetworkAccessManager(self._network_manager)
###############################################################################################
def start(self, kind):
self.kind = kind
self.logger.info("[start] {0} / Url: {1}".format(kind, self.http_url))
# clear cookies and open about:blank page
self.webview.page().networkAccessManager().cookieJar().setAllCookies([])
self.webview.page().currentFrame().setHtml("")
self.connectionStatus.hide()
url = "http://" + self.http_url + "/sign_up?totem_tid=" + self.totem_id
self.logger.info("[start] Loading Full Url: {0}".format(url))
self.webview.load(QUrl(url))
###############################################################################################
class NetworkManager(QNetworkAccessManager):
def __init__(self):
QNetworkAccessManager.__init__(self)
self.logger = logging.getLogger("main.%s" % __name__)
print("conncecting signals start")
# connect signals
self.sslErrors.connect(self._ssl_errors)
self.finished.connect(self._finished)
print("conncecting signals end")
# bind a custom virtual function to createRequest
self.createRequest = self._create_request
def _ssl_errors(self, reply, errors):
self.logger.info('[NetworkManager] [_ssl_errors]')
# currently we ignore all ssl related errors
for error in errors:
self.logger.info('[NetworkManager] IGNORED SSL ERROR: {0} - {1}'.format(error.error(), error.errorString()))
reply.ignoreSslErrors()
def _finished(self, reply):
self.logger.info("[NetworkManager] [_request_finished] url {0}".format(reply.url()))
if not reply.error() == QNetworkReply.NoError:
# request probably failed
self.logger.info("[NetworkManager] [_request_finished] {0}".format(reply.error()))
self.logger.info("[NetworkManager] [_request_finished] {0}".format(reply.errorString()))
else:
reply.close()
def _create_request(self, operation, request, data):
self.logger.info("[NetworkManager] [_create_request]")
reply = QNetworkAccessManager.createRequest(self, operation, request, data)
return reply
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment