Post Request mittels QWebKit?

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
AngelusNoctis
User
Beiträge: 92
Registriert: Sonntag 16. Dezember 2007, 20:03

Hi, kleine Frage...

Ich versuch gerade ein "mini-Browser" zu erstellen der sich direkt bei Joomla einloggt, leider scheitere ich am Post Request.

Kann mir jemand sagen oder am besten Beispielcode zeigen wie man ein Post Request für solch einen Login schreibt und QWebView übergibt?

Ich weiss das man anscheinend QNetworkReplay oder QNetworkRequest benötigt, aber kein Plan wie man den Code umsetzt und Beispielcode finde ich nicht -.-'


Kann jemand helfen?
lunar

@AngelusNoctis: Mit "QWebView.load()" kannst Du beliebige Requests absetzen. Für POST-Requests muss als zweiter Parameter "QNetworkAccessManager.PostOperation" angegeben werden. Das erste Argument enthält den Request selbst, inklusive der URL, an welche der POST-Request geschickt werden soll. Die Daten des POST-Requests – bei einem Login typischerweise Benutzername und Passwort – sind im dritten Argument zu übergeben. Das genaue Format dieser Daten ist von der Webanwendung abhängig, Du musst also beobachten, wie ein normaler Login bei Joomla abläuft.

Edit: Im Übrigen findet man im Internet durchaus Verweise auf entsprechenden Beispiel-Quelltext.
AngelusNoctis
User
Beiträge: 92
Registriert: Sonntag 16. Dezember 2007, 20:03

Danke, guck ich mir gleich an.
AngelusNoctis
User
Beiträge: 92
Registriert: Sonntag 16. Dezember 2007, 20:03

Hi, jetzt hab ich ein kleines Problem mit den Cookies zumindest denke ich es sind die Cookies...
Sobald ich nach erfolgreichem Login einen Link anklicke haut es mich raus.

Gibts ne möglichkeit das aktuelle Cookie auszulesen oder irgendwie zu übergeben?


Als Beispiel:

Code: Alles auswählen

        # Auth-Request
        self.request = QtNetwork.QNetworkRequest(QtCore.QUrl(self.host))
        self.request.setRawHeader('Host', 'www.myhp.ch')
        #self.request.setRawHeader('User-Agent', 'Demo Browser')
        self.request.setRawHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
        self.request.setRawHeader('Accept-Language', 'en-us,en;q=0.5')
        self.request.setRawHeader('Accept-Encoding', 'gzip, deflate')
        self.request.setRawHeader('Proxy-Connection', 'keep-alive')
        self.request.setRawHeader('Referer', 'http://www.myhp.ch/')
        self.request.setRawHeader('Cookie', 'fa3653750d089dfb6f28445cbc4ce751=6810e7a8cbf74c233ea6f88304605867') ##Funktioniert solang ich das für den Login übergebe!
        self.request.setRawHeader('Content-Type', 'application/x-www-form-urlencoded')

        form = '&username=MyUser&passwd=MyPass&op2=login&lang=german&force_session=1&return=B%3AaHR0cDovL3d3dy5jaGF0LmNoLw%3D%3D&message=0&loginfrom=loginmodule&cbsecuritym3=cbm_59527f71_004f178a_2bdf2b40a30d85d9a3e6b5b0b9f70059&j9054dfedcb85a55faaacf227386de337=1&Submit=Login
        
        self.webView.load(self.request, QtNetwork.QNetworkAccessManager.PostOperation, form)
Zuletzt geändert von Anonymous am Montag 9. April 2012, 21:15, insgesamt 2-mal geändert.
lunar

@AngelusNoctis: Hau zurück… oder gib uns eine vernünftige Fehlermeldung :roll: Bevor Du fehlenden Cookies die Schuld gibst, prüfe auch erst einmal mit wireshark, ob die Cookie-Header tatsächlich fehlen…
Antworten