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.
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?
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?
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!')
[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...
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: