Anmeldung auf Website per "requests" bibilotek

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
HVTransformator
User
Beiträge: 12
Registriert: Mittwoch 15. Oktober 2014, 15:17

ich habe folgenden code:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import requests
import json
 
url = "http://example.com"
data = { "login_pwd": "password", "login_act": "username" }
 
r = requests.post(url, data=json.dumps(data))
if(r.status_code == 200):
  if(r.text.find("Beim Passwort wird Groß- und Kleinschreibung unterschieden.") >= 1):
    print "PASSWORT FALSCH"
  else:
    print "PASSWORT RICHTIG"
Er soll in diesem Fall die Website "http://example.com" aufrufen und als post parameter ein passwort und einen Benutzernamen mitgeben.
In der Website kommt wenn das Passwort falsch ist der text "Beim Passwort wird Groß- und Kleinschreibung unterschieden." vor dadurch soll getestet werden ob es richtig ist.
Ich weiß das ist nicht besonders sicher, aber ich werde es ja noch anpassen. (ja ich bin faul)

Folgender fehler tritt auf wenn ich das ganze ausführe:

Code: Alles auswählen

Traceback (most recent call last): File "httprequest.py", line 12, in if(r.text.find("Beim Passwort wird Groß- und Kleinschreibung unterschieden.") >= 1): UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 22: ordinal not in range(128)
Was bedeutet dieser Fehler, und wie kann ich ihn beheben?

DANKE !
BlackJack

@HVTransformator: Du versuchst eine Byte-Zeichenkette (Typ `str`) in einer Unicode-Zeichenkette (Typ `unicode`) zu finden. Dazu muss die Byte-Zeichenkette in Unicode umgewandelt werden, und das passiert ”automagisch” nur mit der ASCII-Kodierung. Und wenn da etwas ausserhalb von ASCII enthalten ist, dann kracht's. In diesem Fall ist das ein ß im Wort "Groß". Einfache Abhilfe: Verwende als Suchzeichenkette Unicode.

``if`` ist keine Funktion, darum sollte man das auch nicht so schreiben als wäre es eine. Die Klammern gehören dort nicht hin.

Um zu testen ob eine Zeichenkette in einer anderen enthalten ist verwendet man den ``in``-Operator statt `find()`.

Eingerückt wird per Konvention mit vier Leerzeichen pro Ebene.
HVTransformator
User
Beiträge: 12
Registriert: Mittwoch 15. Oktober 2014, 15:17

ich habe früher c++, java, javascript, php, html, css programmiert, aber python ist neu für mich,
da ist es besser wenn ich mich nicht ganz umgewähen.

einrücken kann man wie man will, aber ich habe die Erfahrung gemacht das um so weniger eingerückt wird desso besser
BlackJack

@HVTransformator: Wieso ist es besser nicht die Sprache und den dort konventionellen Stil zu verwenden in der man gerade programmiert? Weil's für Dich einfacher ist ist es okay es für alle anderen schwerer lesbar zu machen?

Einrücken kann man in einer Sprache wo die korrekte Einrückung *wichtig* ist nicht wie man will. Zumindest nicht wenn man nicht nur für sich alleine programmiert. Und das tut man nicht mehr wenn man öffentlich Fragen zum eigenen Quelltext stellt.
HVTransformator
User
Beiträge: 12
Registriert: Mittwoch 15. Oktober 2014, 15:17

ok nächstes mal wenn ich Code poste mach ich das.

ende damit.

Anfangsfrage: (darf man das in diesem Forum?)

so sieht das Formular aus in welches das Passwort eingegeben wird: http://pastebin.com/PYMuRujx
mit deiner Code Anpassung funktioniert das ganze, aber selbst wenn ich ein richtiges Passwort angebe sagt er,
PASSWORD FALSCH,
was heißt das er auf die Login-Seite Zurückgeleitet wurde.
kann es sein das mein login_pwd und login_act nicht als post variablen übergeben werden sondern über irgendwas anderes?

nochmal der jetzige Code: http://pastebin.com/cJCA1n2M
BlackJack

@HVTransformator: Die Methode POST steht da ja ziemlich deutlich in dem HTML-Schnippsel. Du solltest das dann vielleicht nicht als JSON schicken sondern tatsächlich als POST-Daten. Also einfach mal das `json.dumps()` weg lassen.
HVTransformator
User
Beiträge: 12
Registriert: Mittwoch 15. Oktober 2014, 15:17

Wuhu es geht!

Danke.
Antworten