| Autor |
Beitrag |
theCylus
Hält's aus hier
Beiträge: 13
|
Verfasst: Sa 04.04.09 00:05
Hallo,
ich bin zwar neu hier, aber ich habe ganz brav das ganze Forum durchsucht... und leider keine Antwort auf meine Frage gefunden.
Ich möchte mich auf einer Internetseite mit Hilfe eines selbstgebauten Programms anmelden. Es geht lediglich um den einmaligen Login! Ich habe nicht vor, zu spammen oder andere illegale Sachen zu machen.
Es gibt auf der Startseite 2 Eingabefelder, plus einer Checkbox (immer eingeloggt bleiben) und einem "Login-Button". Ich denke, der Rest sollte nicht relevant sein, da es nichts gibt, was der User sonst noch ausfüllen kann. Zunächst mal der entsprechende HTML-Code und dann meine Lösung in Delphi.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| <form action="login.php" method="post"> <table border='0'> <tr> <td width='270' align='right'><br><br><br><a href='?show=register#teaser'><img src='img/register.png' class='noborder'></a></td> <td> <table border='0' width='240' height='185' align='center' background="img/v1/menu/login.png"> <tr>
<td align='right'> <br> <br> <br> <br> <br> </td> <td width='20'></td> </tr>
<tr> <td align='right'> <font size='1' face='verdana' color='#CCCCCC'>Nickname:</font><br> <input type="text" size='20' name="username"> </td> <td width='20'></td> </tr> <tr>
<td align='right'> <font size='1' face='verdana' color='#CCCCCC'>Passwort:</font><br> <input type="password" size='20' name="pwd"> </td> <td width='20'></td> </tr> <tr> <td align='right'>
<font size='1' face='verdana' color='#CCCCCC'>speichern?</font><input type='checkbox' name='auto'><input name="action" type="submit" value="Login"><br> |
Mein Lösungsvorschlag lautet folgendermaßen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var IdHTTP: TIdHTTP; ParamData, PostDataStream : TStringStream; begin IdHTTP:= TIdHTTP.Create(nil); PostDataStream := TStringStream.Create('username=BLUBBER&password=BRAUSE&action=Login'); ParamData := TStringStream.Create(''); ParamData.WriteString(''); IdHTTP.Post('http://DieStartseite.de/index.php', ParamData, PostDataStream); PostDataStream.Position := 0; Memo1.Text := PostDataStream.DataString; end; |
Mein Lösungsvorschlag geht leider nicht. Ich habe diverse Beiträge gelesen, in denen das "&" als Variablentrennung im POST-String schuld sein soll. Vielleicht aber auch die Reihenfolge der Parameter oder einfach die .PHP-Datei, an die ich übertrage. "DieStartseite" ist in diesem Fall die Seite, auf der ich mich befinde, wenn ich die Eingabefelder sehe!
Kann mir jemand sagen, wo der Fehler liegt? Sollte ich die login.php aufrufen? Oder stimmen die POST-Daten nicht? Der HTML-Code ist ein Ausschnitt aus der Seite und absolut unverändert.
Moderiert von Narses: Quote- durch Delphi-Tags ersetzt
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Sa 04.04.09 00:27
Und um welches Browserspiel geht es diesmal, wofür jemand einen Bot schreiben will?
Bei so "ich möchte mich auf Internetseite XYZ einloggen, aber ich verrate euch nicht, welche es ist" bin ich immer seeehr misstrauisch.. nur selten kommt hierbei etwas "legales" (an den Regeln der entsprechenden Internetseite gesehen) bei raus.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
theCylus 
Hält's aus hier
Beiträge: 13
|
Verfasst: Sa 04.04.09 01:05
Es geht natürlich um kein Browserspiel. Es geht um eine ganz normale Internetseite, auf der eine Anmeldung notwendig ist. Die "Zensur" der URL fand lediglich aus Gründen des Datenschutzes statt. Ich möchte ja nicht, daß ein Bot die URL saugt und dann das Spammen anfängt.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 04.04.09 01:19
Naja, grundsätzlich schau dir einmal TIdHttp an, wie das geht siehst du z.B. in diesem Programm:
www.delphi-forum.de/viewtopic.php?t=91021
// EDIT: Dass du das benutzt, hatte ich irgendwie bei dir übersehen. Du solltest den Quelltext auch mit Delphi-Tags formatieren, dann sieht man das besser.
Etwas genaueres, also fertig zugeschnittenen Code, möchte ich ohne Kenntnis der Webseite auch nicht posten. Allerdings siehst du in dem Quelltext ja auch ein fertiges Beispiel.
Die Frage ist allerdings was nach dem Login passieren soll. Der verlinkte Quelltext holt z.B. nur den Quelltext der Ergebnisseite.
theCylus hat folgendes geschrieben : | | Die "Zensur" der URL fand lediglich aus Gründen des Datenschutzes statt. Ich möchte ja nicht, daß ein Bot die URL saugt und dann das Spammen anfängt. |
Du kannst die Adresse der Website auch hier im Forum als Anhang in eine Textdatei schreiben. Anhänge können nur registrierte Benutzer abrufen und deren Inhalte können auch durch eine Suche nicht gefunden werden.
Zuletzt bearbeitet von jaenicke am Sa 04.04.09 01:47, insgesamt 1-mal bearbeitet
|
|
theCylus 
Hält's aus hier
Beiträge: 13
|
Verfasst: Sa 04.04.09 01:32
Vielen Danke für die Info!
Leider ist der genannte Thread bezüglich meiner Frage nicht ganz genau und am Ende muß ich trotzdem noch den Fehler in meinem Programm suchen. Die Seite um die es geht, habe ich angehängt. Ich würde mich freuen, wenn jemand einen Rat weiß. Ich gehe schwer davon aus, daß es nur ein paar falsche Zeichen sind oder eine falsche Reihenfolge der Postdaten o.ä.
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 04.04.09 01:44
Ok, bei der Seite steht nichts dagegen in den Nutzungsbedingungen, also ist das ja ok.
Zwei Sachen fallen mir auf: Delphi-Quelltext 1: 2: 3: 4:
| PostDataStream := TStringStream.Create('username=BLUBBER&password=BRAUSE&action=Login'); ParamData := TStringStream.Create(''); ParamData.WriteString(''); IdHTTP.Post('http://DieStartseite.de/index.php', ParamData, PostDataStream); | Der Parameter heißt pwd und die Datei login.php 
|
|
theCylus 
Hält's aus hier
Beiträge: 13
|
Verfasst: Sa 04.04.09 01:57
OK, das war mein Fehler. Ich hab wohl vor lauter experimentieren eine "alte" Version des Codes gepostet. Die Variable ist SICHER pwd (siehe Quelltext).
Bei der index.php war ich mir nicht sicher, ob ich die Seite aufrufen muß, die die Loginfelder enthält, oder lieber die, die offensichtlich die Daten auswertet. (1. = index.php und 2. = login.php)
Beide Versuche waren jedoch erfolglos.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 04.04.09 02:38
Du schreibst die Post-Parameter in den Stream, in den die resultierende Seite kommt (dritter Parameter), statt sie als Post-Parameter zu übergeben. Als Post-Parameter übergibst du nix (zweiter Parameter).
Vertausch mal ParamData und PostDataStream...
|
|
theCylus 
Hält's aus hier
Beiträge: 13
|
Verfasst: Sa 04.04.09 02:45
Also wenn das der Fehler war, dann entschuldige ich mich für die blöde Anfrage  Manchmal sieht man den Wald vor lauter Bäumen nicht.. Ich poste das Ergebnis.
--- Moderiert von Narses: Beiträge zusammengefasst---
Das Vertauschen hat leider nichts gebracht. Das Ergebnis ist exakt das Gleiche.
--- Moderiert von Narses: Beiträge zusammengefasst---
Um mir das Ganze mal etwas einfacher und verständlicher zu machen, habe ich einfach mal den relevanten Teil der Loginseite kopiert und eine einfache login.php geschrieben. Gebe ich im Browser einen beliebigen Benutzernamen und ein Kennwort ein, gibt die login.php beides per echo aus. Wenn ich allerdings mein Programm die Daten abschicken lasse, ist die Rückmeldung leer. Ich poste einfach mal meinen korrigierten Source und die login.php. Vielleicht/hoffentlich ist es ja nur ein kleiner, einfacher Fehler.
@jaenicke: Danke für deinen Tip mit den vertauschten Variablen.
Mein Source:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.Button1Click(Sender: TObject); var IdHTTP: TIdHTTP; Rueckgabe, PostData : TStringStream; Username, Passwort : String; begin IdHTTP:= TIdHTTP.Create(nil); PostData := TStringStream.Create(''); Rueckgabe := TStringStream.Create(''); Rueckgabe.WriteString(''); PostData.WriteString('username=USERNAME&pwd=PASSWORT&action=Login'); IdHTTP.Post('http://postdata.kilu.de/login.php', PostData, Rueckgabe); PostData.Position := 0; Memo1.Text := Rueckgabe.DataString; end; |
Die Auswertende login.php
Quelltext 1: 2: 3: 4: 5: 6:
| <?php
$nachricht = 'Benutzername: ' . $_POST['username'] . "\r\n" . 'Passwort: ' . $_POST['pwd']; echo($nachricht);
?> |
Ich weiß natürlich nicht, wie die login.php auf dem Originalserver aussieht. Aber angesichts der Tatsache, daß es bei meiner login.php zum gleichen Ergebnis führt, wie beim Originalserver, vermute ich, der Aufbau ist ähnlich. Die Testseite ist postdata.kilu.de
Ich bin für jede Hilfe dankbar!
Moderiert von Narses: Quote- durch Delphi-Tags ersetzt
|
|
theCylus 
Hält's aus hier
Beiträge: 13
|
Verfasst: So 05.04.09 02:00
Ich hoffe, es stört niemanden, wenn ich meine Frage jetzt selbst beantworte. Nach langem Suchen und Probieren, habe ich den Fehler gefunden. Ich muß vor "idHTTP.Post" noch "idHTTP.Request.ContentType:='application/x-www-form-urlencoded';" ausführen. Dann funktioniert das Ganze problemlos. Für diejenigen, die irgendwann mal das gleiche Problem haben, hier der funktionierende Source.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var IdHTTP: TIdHTTP; Rueckgabe, PostData : TStringStream; Username, Passwort : String; begin IdHTTP:= TIdHTTP.Create(nil); PostData := TStringStream.Create(''); Rueckgabe := TStringStream.Create(''); Rueckgabe.WriteString(''); PostData.WriteString('username=USERNAME&pwd=PASSWORT&action=Login'); idHTTP.Request.ContentType:='application/x-www-form-urlencoded'; IdHTTP.Post('http://postdata.kilu.de/login.php', PostData, Rueckgabe); PostData.Position := 0; Memo1.Text := Rueckgabe.DataString; end; |
Die POST-Daten, sowie die URL müssen angepasst werden. War ja nur ein Testserver. Vielen Dank für eure Hilfe!
Moderiert von Narses: Quote- durch Delphi-Tags ersetzt
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 05.04.09 02:02
So war das in dem oben verlinkten Programm auch, ich dachte das hättest du dir angeschaut und ggf. ausprobiert. 
|
|
|