|
You last visited: Today at 04:04
Advertisement
Python requests Login
Discussion on Python requests Login within the General Coding forum part of the Coders Den category.
03/15/2016, 23:24
|
#1
|
elite*gold: 100
Join Date: Feb 2012
Posts: 2,341
Received Thanks: 207
|
Python requests Login
Hallo,
Versuche mich derzeit in Python und bin gerade, der Übung wegen, dabei ein Skript zu schreiben, mit dem man seinen Zalando Acc verwalten/auslesen kann.
Allerdings hänge ich schon am LogIn des ganzen. Den Request mache ich über requests. Ich glaube das Problem ist, dass der Cookie einfach nicht übergeben wird. Immer wenn ich nach dem LogIn über POST auf das Benutzerkonto zugreifen will(GET), bin ich nicht eingeloggt. Auch wenn ich die Seite direkt nach dem LogIn abfrage, bin ich nicht eingeloggt.
Code:
import requests
with requests.Session() as c:
url = 'https://www.zalando.de/login/'
USERNAME = "***"
PASSWORD = "***"
#login_data = dict(email = USERNAME, password = PASSWORD, Referer = "https://www.zalando.de/login/")
payload = {'email': '***', 'password': '***', 'Referer' : 'https://www.zalando.de/login/'}
get = c.get(url = url)
post = c.post(url = get.url, params=payload)
#print(post.text)
page = c.get("https://www.zalando.de/benutzerkonto/", params=payload, cookies=c.cookies)
print (page.text)
Mir ist aufgefallen, dass wenn ich per post.url die URL der POST-Abfrage abfrage, "www.zalando.de" rauskommt und NICHT "www.zalando.de/login". Wieso? Wieso leitet er wohl auf auf zalando.de?
MfG
|
|
|
03/16/2016, 01:32
|
#2
|
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
|
Du sendest nicht genug Daten, schau dir das hier mal an
Code:
$hSession = _WinHttpOpen("Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36")
$hConnect = _WinHttpConnect($hSession, "www.zalando.de", 443)
Local $sHTML = _WinHttpSimpleSSLRequest($hConnect, "GET", "")
Local $aSrcPageRegEx = StringRegExp($sHTML, "_sourcePage"" value=""(.+?)"" \/>", 3)
Local $aXTKRegEx = StringRegExp($sHTML, "name=""_xtk"" value=""(.+?)""\/>", 3)
Local $a__fpRegEx = StringRegExp($sHTML, "__fp"" value=""(.+?)"" \/>", 3)
Local $sData = "email=" & StringReplace($aUser[0], "@", "%40") & _
"&password=" & $aUser[1] & _
"&sourceId=account" & _
"&softLogin=true" & _
"&login=" & _
"&_sourcePage=" & $aSrcPageRegEx[1] & _
"&_xtk=" & $aXTKRegEx[0] & _
"&__fp=" & StringReplace($a__fpRegEx, "=", "%3D")
$sHTML = _WinHttpSimpleSSLRequest($hConnect, "POST", "login", Default, $sData)
If StringInStr($sHTML, "Abmelden") Then
|
|
|
03/16/2016, 03:23
|
#3
|
elite*gold: 56
Join Date: Oct 2010
Posts: 3,409
Received Thanks: 1,219
|
Man hab ich mir ne Weile lang an Logins die Zähne ausgebissen. :P
Jetzt wo ich weiß wie die ganze Suppe funktioniert, kann ich dir das gerne schnell erklären.
Headers:
Dein Browser sendet standardmäßig spezifische Headers mit jeder Anfrage mit. In deinem Browsereinstellungen oder mit Addons kannst du diese ändern.
Zum Beispiel verwende ich ein Addon um meinen User-Agent zu verschleiern.
Der Server ließt die Infos im Header und reagiert entsprechend darauf.
Beispielsweise hat paypal.com meine Anfrage blockiert mit der Aussage "Deine Browserversion ist zu alt und enthält Sicherheitslücken.", weil mein User-Agent-Verschleierer paypal.com gesagt hat ich benutze Chrome Version 28.
Wenn du Anfragen mittels Software baust, musst du ggf. benötige Headers setzen, damit der Server deine Anfrage akzeptiert. Sehr viele Server ignorieren Anfragen die nicht von Browsern stammen.
Parameter und Formulardaten:
In 'requests' gibt es einen Unterschied zwischen Parametern und Formulardaten. Bei einer POST Anfrage verwendet man 'data=' statt 'params='.
Code:
>>> r = requests.post('http://httpbin.org/post', data = {'key':'value'})
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('http://httpbin.org/get', params=payload)
Cookies:
Wenn du 'requests.Session()' verwendest, werden Cookies automatisch gespeichert und verwendet.
Sitzungsvariablen:
Wenn du eine neue Sitzung startest ('request.Session'), werden in der Regel serverseitig neue Variablen spezifisch für diese Sitzung erstellt, darunter fallen auch einige Cookies.
Diese Sitzungsvariablen befinden sich auch in Formularen. Sie dienen unter anderem der Sicherheit.
Wie geht man jetzt am Besten vor um den Login nachzustellen?- Mittels Browser einloggen und Anfrage analysieren
- Daten aus Anfrage im Skript einbauen
- Sitzungsvariablen ermitteln und einbauen
- POST Anfrage absenden und Erfolg ermitteln
Browser Anfrage:
Hier ein Skript mit Kommentaren:
Code:
import requests
from lxml.html import fromstring
import re
# Headers. Kann man sich aus den Browser kopieren. Welche benötigt werden, muss man ausprobieren.
# Ggf. auch keine.
headers = {
'User-Agent': 'BOT',
'Host':'www.zalando.de',
'Origin':'https://www.zalando.de',
'Upgrade-Insecure-Requests':'1',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4',
'Cache-Control':'max-age=0',
'Connection':'keep-alive',
'Content-Type':'application/x-www-form-urlencoded',
}
# Erzeuge Sitzung und setze die Sitzungsheaders - werden dann immer mitgesendet.
s = requests.Session()
s.headers = headers
# Downloade die Loginseite um die Sitzungsvariablen zu ermitteln
# Sitzungsvariablen sind bei jeder Sitzung neu
page = s.get('https://www.zalando.de/login')
# Ich verwende 'fromstring' aus der lxml Bibliothek um die Formulare (html forms)
# aus dem Seitenquelltext auszulesen
# Suche nach richtigem Formular
# Unserer Loginformular ist das Zweite auf der Seite - das erste ist die Suche
for form in fromstring(page.text).forms:
print(form.form_values())
print('\n\n')
# Loginformular auswählen und mittels 'form_values()' sitzungsspezifische Formularvariablen
# auslesen
loginform = fromstring(page.text).forms[1]
formvalues = dict(loginform.form_values())
# Zusätzlich benötige Formularvariablen setzen - ausgelesen aus Browser Anfrage
formvalues['email'] = 'email'
formvalues['password'] = 'password'
formvalues['login'] = ''
# Formularvariablen in Anfrage setzten und URL vom Formular verwenden
s.post('https://www.zalando.de/login', data=formvalues)
# Seite mit loginspezifischer Information aufrufen und checken ob info da ist
# Check auch mit print(r.text) und durchsuchen
r = s.get('https://www.zalando.de/benutzerkonto/')
if re.search(r'Vorname Nachname', r.text):
print('Login successful!')
|
|
|
 |
Similar Threads
|
[Python]Hilfe Login
05/24/2015 - Metin2 Private Server - 1 Replies
Huhu liebe Community,
Heute habe ich mal eine Frage, oft antworte ich hier auf Fragen :P
Ich bin derzeit ein sehr großer Anfänger in Photoshop, habe mich trotzdem mal dran gesetzt ein Loginbild zu erstellen schlicht und einfach um zu schauen ob es funktioniert ^^, ich hab auch an den .sub,s rumgebastelt und auch versucht das ganze einzufügen, soweit so gut bekomme ich das Image rein als .dds oder wie ich es haben möchte, es ist aber kein Button mehr anklickbar etc. ^^.
Ich bin schon...
|
Login İnterface (Python) - KF-Works
03/30/2014 - Metin2 PServer Guides & Strategies - 13 Replies
# Closed - - KF-Works.Tk
|
Python Login Design Hilfe
02/01/2014 - Metin2 Private Server - 1 Replies
Guten Tag,
Kann mir jemand bei der Button Anpassung helfen ?
http://i.epvpimg.com/cTcbf.jpg
|
New login interface - python help
07/07/2013 - Metin2 Private Server - 6 Replies
Hi , sorry for my english !
------------------------------------------------- -----------------------
I found on the internet a cool login interface , I adapted it to metin2 ... but i don't know python :( Can someone help me with python ?
He/She can take the interface , but he/she can't public it on internet ! please ... just don't public it !
#Screen deteled
|
[Python] Das Fenster nur im Login?
05/19/2013 - Metin2 Private Server - 9 Replies
Hallo Community,
Ich wollte mit dem Gui Editor von KaMeR1337 meine Intrologin so bearbeiten das bei der Channel auswahl links und rechts neue fenster sind.
Das ist mir auch gelungen, aber nun habe ich ingame diese fenster auch :O
Seht selbst:
|
All times are GMT +1. The time now is 04:04.
|
|