strohne / Facepager

Facepager was made for fetching public available data from YouTube, Twitter and other websites on the basis of APIs and webscraping.
https://github.com/strohne/Facepager/releases
506 stars 198 forks source link

SSL Handshake failed on Windows and Facebook #23

Closed dorvak closed 10 years ago

dorvak commented 10 years ago

Der SSL Handshake scheint auf einem Windows-Rechner einer Anwenderin fehlzuschlagen, seltsamerweise nur mit der Facebook-Seite:

2014-01-09 10:13:34.022000 Network error (6): SSL handshake failed 2014-01-09 10:13:34.042000 Error loading web page

Vermutung: Facebook liefert irgendeine SSL-Information nicht mit, die QT haben will. Ist kaum debug-bar...

dorvak commented 10 years ago

Lösung könnte einfach darin bestehen, SSL Fehler zu ignorieren: http://qt-project.org/forums/viewthread/24754 Bzw: hier http://stackoverflow.com/questions/8362506/qwebview-qt-webkit-wont-open-some-ssl-pages-redirects-not-allowed

dorvak commented 10 years ago

class QWebPageCustom(QWebPage):

logmessage = Signal(str)

def __init__(self,*args,**kwargs):
    super(QWebPageCustom, self).__init__(*args,**kwargs)
    #self.networkAccessManager().sslErrors.connect(on_ssl_errors)

def supportsExtension(self,extension): 
    if (extension == QWebPage.ErrorPageExtension):
        return True
    else:
        return False

def extension(self,extension,option=0,output=0):
    if (extension != QWebPage.ErrorPageExtension): return False

    if (option.domain == QWebPage.QtNetwork):
        msg = "Network error ("+ str(option.error)+"): "+option.errorString

    elif (option.domain == QWebPage.Http):
        msg = "HTTP error ("+ str(option.error)+"): "+option.errorString

    elif(option.domain == QWebPage.WebKit):
        msg = "WebKit error ("+ str(option.error)+"): "+option.errorString    
    else:
        msg = option.errorString

    print(option.url)
    print(msg)

    self.logmessage.emit(msg)

    return False;   

def on_ssl_errors(reply, errors):
   url = unicode(reply.url().toString())
   reply.ignoreSslErrors()
   print "SSL certificate error ignored: %s" % url
strohne commented 10 years ago

In on_ssl_errors fehlt der self-Parameter.

Auch beim connecten des signals muss es self.on_ssl_errors heißen.

Außerdem sollte in der extension-Funktion am Ende glaube ich besser True zurückgegeben werden. Das überflüssige Semikolon verrät wohl, welche Programmiersprachen ich sonst so schreibe ;-)

Sollte so gehen, siehe commit im threading branch.

dorvak commented 10 years ago

Danke für den Commit (das mit self war meiner Verwirrtheit geschuldet). Ich warte noch die Rückmeldung der Studentin ab, dann close ich. Das war ja gottseidank recht easy zu beheben (hoffen wir es).

dorvak commented 10 years ago

Problem gelöst!