2017-11-02 3 views
1

Ich versuche, eine Web-Seite mit Python-Anfragen-Modul anmelden.Python POST-Anfrage ohne erneutes Laden der Seite

Hier ist das Szenario: Sobald ich das Benutzername Passwort eingeben und auf Senden klicken, wird die Antwort-Webseite erhalten und der Benutzer muss Sicherheitsfragen beantworten.

So

POST anfordern 1 - einreichen Benutzername, Passwort

Antwort 1 - Seite mit Sicherheitsfragen

Dieser Teil recht geradlinig.

Aber für den nächsten Schritt, um die Antworten auf die Sicherheitsfrage zu senden, muss ich eine weitere Postanforderung machen - für die ich die Seite erneut laden muss. Aber sobald ich neu lade, bekomme ich die ursprüngliche Login-Seite zurück (mit Benutzernamen und Passwortfeldern).

Gibt es einen Workaround dafür?

EDIT: Ich verwende requests.Session() Objekt alle Anfragen durchzuführen

Hier ist der Code

s = requests.Session() 

login = {'username': username, 'password': password} 
url = 'https://login.xyz.com' 
r = s.post(url, data=login) 

# r.url is also https://login.xyz.com 

answers = {'question1': answer1, 'question2': answer2} 
r = s.post(url, data=answers) 
+0

Wo Ihr Code ist? Hast du die gleiche 'Session'? – schwobaseggl

+1

Das Ergebnis Ihrer Anmeldung ist höchstwahrscheinlich ein Cookie und eine Weiterleitungs-URL. Versuchen Sie, die gesamte Login-Aktion in einem Browser auszuführen und den Netzwerkverkehr auf dieser Seite zu erfassen (in Firefox oder Chrome können Sie dies auf der Seite Entwicklungstools tun - F12-). Überprüfen Sie jede Anfrage im erfaßten Datenverkehr und versuchen Sie dann entsprechend zu automatisieren. Wenn ich richtig bin, dann sollte die Reihenfolge der Operation sein: posten Sie die Login-Daten, holen Sie die Antwort, analysieren Sie die Antwort für den Authentifizierungs-Cookie, folgen Sie der Weiterleitung mit einer neuen Post-Anfrage, die den Cookie enthält. – BoboDarph

+0

Der Versuch, in Ihrem Beispiel eine Verbindung zur Zielwebsite herzustellen, ohne Zertifikatsprüfungen zu deaktivieren, führt zu einem Fehler, da das SSL-Zertifikat CNAME der Website ungültig ist (möglicherweise selbstsigniert oder gefälscht). Möglicherweise möchten Sie den Antwortcode auf 200 oder etwas überprüfen, bevor Sie etwas anderes an die Website senden. – BoboDarph

Antwort

2

sollten Sie Session verwenden Cookies, um Sie vom Server erhalten nach der Anmeldung

s = requests.Session() 
s.post('first url') 
s.post('second url') 

hier die Dokumentation und Beispiele. Siehe: http://docs.python-requests.org/en/master/user/advanced/

+0

Ja, ich habe 'requests.Session()' verwendet, aber es scheint nicht zu funktionieren. –

+0

Nun, es ist schwer, Ihnen etwas Spezifisches zu sagen, es sei denn, Sie geben den Code – uppi

+0

hey Kumpel, ich habe den Code der Frage hinzugefügt. –

1

Sie überprüfen Haben, wenn die Login-Seite Sie einige sessionId geschickt? In der Regel werden sie in HTTP-Cookies gespeichert.

In diesem Fall sollten Sie sie innerhalb der zweiten Post Anfrage senden.

+0

Warum -1? Ich denke, meine Antwort ergibt Sinn! – Charlie

+0

Am wahrscheinlichsten wäre dies als Kommentar geeigneter. –

Verwandte Themen