Gleich mal vorweg meine Daten:
- Delphi 7
- Indy 9 ( aktuellste )
- idHTTP
- CookieManager
Nun zu meinem Problem:
Das ganze ist so geplant:
Mein Programm soll sich in eine Webseite die mit Session Cookies arbeitet einloggen. Die 3 dazu benötigten Eingaben ( User ; Passwort ; Captcha ) werden aus dem dafür vorgesehenen Editfenstern entnommen. Nach dem login wird der Quellcode geladen und auf ein Wort durchsucht.
Ist das besagte Wort vorhanden => Login erfolgreich
Ist das Wort nicht vorhanden => Login fehlgeschlagen.
Wenn Login erfolgreich war => Filtere den Quellcode und suche 2 relevante Werte heraus.
_______________________
Bis hierhin funktioniert alles bestens.
Allerdings soll das Programm nach erfolgreichen Login die Seite wechseln.
Ich habe testweise den Quellcode der aufzurufenden Seite auf einem sichtbaren RichEdit - Feld ausgegeben.
Leider gibt der Server trotz erfolgreichem Login immer wieder die Meldung "Sie sind nicht eingeloggt" zurück.
idHTTP und der CookieManager sind miteinander verknüpft.
allowcookies ist auf true.
handleredircts ist ebenfalls auf true.
Mein aktueller Code sieht so aus:
Code:
// Progressbar auf 0 setzen
Gauge1.Progress := 0;
// Loginseite mittels den Daten aus meinen editfenstern ansteuern
Login := IdHTTP1.Get('http://localhost/login.php?action=login&login2='+edit1.Text+'&passwort2='+edit2.text+'&grafikcode='+edit3.Text+'&Login=Login');
// Testweise eingebaut um zu schauen ob ein Cookie gesetzt wird
ShowMessage(IdCookieManager1.CookieCollection.Items[0].CookieText);
// Nach erfolgreichen Login auf die nächste Seite navigieren
Seite := IdHTTP1.Get('http://localhost/index.php');
Gauge1.Progress := Gauge1.Progress+1;
// Quellcode im Textfenster ausgeben
richedit1.Text := Seite;
Anschließend wird der im "Login" gespeicherte Datensatz ausgewertet
Kleiner ausschnitt:
Code:
// Login nach dem Wort "erfolgreich" durchsuchen
Buff:= PChar(Login);
if SearchBuf(Buff, length(Buff), 0, 0, 'erfolgreich') <> nil then
begin
Label1.Font.Color := clgreen;
Label1.Caption := 'Login erfolgreich!';
Gauge1.Progress := Gauge1.Progress+1;
// anschließend den Text zwischen den beiden HTML Tags auslesen
filter1:='am <b> ';
filter2:='</b>.<br>';
position1 := Length(filter1);
position1 := Pos(filter1, login) + Length(filter1);
repeat
position2 := Pos(filter2, login);
until
position2 >= position1;
if position1 <> Length(filter1) then
begin
// Da ich 2 Werte auslese die hintereinander stehen wird 2x gefiltert.
// Beim ersten mal Bsp: <br>21.01.09 <br><br> 12:00 Uhr</br>
// Erst wird alles vor dem Datum und nach der Uhrzeit gefiltert
login := copy(login,position1,position2-position1);
// Dann wird der HTML code in der mitte zwischen den beiden Werten gefiltert
login := StripHTML(login);
label5.Caption := (' Dein letzter Login war am '+login);
end;
end
// Taucht das gesuchte wort nicht auf =>
else
begin
Label1.Font.Color := clred;
Label1.Caption := 'Logindaten oder Captcha falsch!';
webbrowser1.Navigate('http://localhost/code.php');
end;
end;
---------------------------
session_cookie=48675b1345871fc4aeed14776d68f6d6; domain=localhost
---------------------------
mit dem Webbrowser funktioniert es zwar, aber ich möchte es gern über die Indy Komponenten Regeln
( Ein Update auf Indy10 klappt bei mir leider nicht (wahrscheinlich bin ich einfach zu doof dafür))






