Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Login mit IdHTTP (https://www.delphipraxis.net/94974-login-mit-idhttp.html)

Kharlanki 28. Jun 2007 19:08


Login mit IdHTTP
 
Hi,

ich versuche gerade, mich automatisiert in eine Website einzuloggen.

Anfangs habe ich den Login-Prozess einem EmbeddedWB ueberlassen, habe mir die SessionID aus der weitergeleiteten URL rausgepopelt und diese dann bei allen weiteren Anfragen per IdHTTP.Get verwendet.
Jetzt will ich aber alles ueber ein IdHTTP erledigen... und hier komme ich nicht weiter.

Hier der Code des Login-Formulares:
Code:
<form method="POST" action="login.php">
<p align="center">[b]<font size="2" face="Verdana">Loginbereich

</font>[/b]</p>
<div align="center">
  <center>
  <table style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="3">
        <tr>
      <td width="100"><font size="2" face="Verdana">[b]Benutzername:[/b]</font></td>
      <td width="100"><input class="inputfeld2" name="user" maxlenght="20" size="20"></td>

    </tr>
    <tr>
      <td width="100"><font size="2" face="Verdana">[b]Passwort:[/b]</font></td>
      <td width="100"><input class="inputfeld2" type="password" name="pwd" maxlenght="20" size="20">
</td>
    </tr>
    <tr>
      <td colspan="2">
      <p align="center">

      <input type="submit" class="inputfeld2" value="Login" name="login"></td>
    </tr>
  </table>
  </center>
</div>
<p align="center">[url="passwort.php"]Benutzerdaten vergessen?[/url]</p>
<p align="center">[url="aktivlink.php"]Aktivierungslink erneut zuschicken[/url]</p>
Und so sieht mein Code aus:
Delphi-Quellcode:
begin
  oldct := http.Request.ContentType;
  http.Request.ContentType := 'application/x-www-form-urlencoded';
  try
    Ergebnis := TStringList.Create;
    http.HTTPOptions := http.HTTPOptions - [hoKeepOrigProtocol];
    Ergebnis.Clear;
    try
      try
        sl := TStringList.Create;
        try
          sl.Text := 'user=bla&pwd=fasel';
          FResult := HTTP.post ('http://www.irgendwas.de/login.php', sl);
        finally
          sl.Free;
        end;
      finally
        try
          if (HTTP.Connected) then
            HTTP.DisconnectSocket;
        except
        end;
      end;
    except
    end;
    Ergebnis.Add (AdjustLineBreaks(FResult));
  finally
    http.Request.ContentType := oldct;
  end;
  memPage.Lines.Clear;
  memPage.Lines.Text := Ergebnis.Text;
  Ergebnis.Free;
end;
Ich bekomme aber immer nur die Login-Seite zurueckgeliefert. Selbst, wenn ich falsche Login-Daten verwende, kommt keine Anzeige "Benutzername unbekannt", die beim manuellen Einloggen erscheint.

Laut Firefox LiveHTTPHeaders ergibt ein manueller Login:
Code:
[url]http://www.irgendwas.de/login.php[/url]

POST /login.php HTTP/1.1
Referer: [url]http://www.irgendwas.de/login.php?ref=[/url]
HTTP/1.x 302 Found
Location: ./members/loginbereich.php?sessionid=ad8f9603e14204719d7aec8e63e05e4f
----------------------------------------------------------
[url]http://www.irgendwas.de/members/loginbereich.php?sessionid=ad8f9603e14204719d7aec8e63e05e4f[/url]

GET /members/loginbereich.php?sessionid=ad8f9603e14204719d7aec8e63e05e4f HTTP/1.1
Referer: [url]http://www.irgendwas.de/login.php?ref=[/url]

HTTP/1.x 200 OK
----------------------------------------------------------
Irgendwelche Hinweise oder Gedankenanstoesse?

SirThornberry 28. Jun 2007 19:13

Re: Login mit IdHTTP
 
so nicht
Delphi-Quellcode:
sl.Text := 'user=bla&pwd=fasel';
ich VERMUTE daran hängt es denn erwartet wird
Delphi-Quellcode:
sl.Text := 'user=bla'#13#10'pwd=fasel';

Kharlanki 28. Jun 2007 19:22

Re: Login mit IdHTTP
 
Das wars leider auch nicht. Eben probiert.

SirThornberry 28. Jun 2007 19:31

Re: Login mit IdHTTP
 
erwartet die Seite cockies? Eventuell könntest du ja die url bekannt geben so das wir auch probieren können denn so ins blaue hinein raten ist recht schwer.

Kharlanki 28. Jun 2007 20:21

Re: Login mit IdHTTP
 
Cookies werden nicht gesetzt.

Die URL moechte ich nicht nennen, da ich mir hier zum Testen eine Seite mit Login ausgesucht habe, deren AGB ein automatisiertes Einloggen wohl nicht gutheissen. ;)

Sehe ich das richtig, dass IdHTTP nach einem Post() automatisch die weitergeleitete Seite mit Get() nachlaedt? Wo finde ich dann die neue URL mit einer moeglichen SessionID und wo befindet sich der Quelltext der weitergeleiteten Seite?

Kharlanki 29. Jun 2007 11:52

Re: Login mit IdHTTP
 
Ich habe es jetzt mal mit einem Login hier in der DP ausprobiert:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Ergebnis : TStringList;
  tmpString: String;
  oldct: string;
  FResult: String;
  ParamData : TStringStream;

begin
  oldct := http.Request.ContentType;
  http.Request.ContentType := 'application/x-www-form-urlencoded';
  try
    Ergebnis := TStringList.Create;
    http.HTTPOptions := http.HTTPOptions - [hoKeepOrigProtocol];
    Ergebnis.Clear;
    try
      try
        ParamData := TStringStream.Create('');
        ParamData.WriteString('username=bla');
        ParamData.WriteString('password=fasel');
        ParamData.WriteString('redirect=');
        try
          FResult := HTTP.post('http://www.delphipraxis.net/login.php', Paramdata);
        finally
          ParamData.Free;
        end;
      finally
        try
          if (HTTP.Connected) then
            HTTP.DisconnectSocket;
        except
        end;
      end;
    except
    end;
    Ergebnis.Add (AdjustLineBreaks(FResult));
  finally
    http.Request.ContentType := oldct;
  end;
  memPage.Lines.Clear;
  memPage.Lines.Text := Ergebnis.Text;
  Ergebnis.Free;
end;
Auch hier erhalte ich bei falschen Zugangsdaten noch nicht einmal den Hinweis, dass die Daten falsch sind, sondern einfach nur wieder die Seite login.php...

SirThornberry 29. Jun 2007 12:59

Re: Login mit IdHTTP
 
bei dem dp-login fehlt auf jeden fall schonmal die checkbox und der submit-button.
Lasse ich diese beiden input-felder weg hab ich das gleiche Resultat wie du. Lasse ich diese Angaben nicht weg sieht das resultat wie im Browser aus. Wenn man das gleiche Resultat haben will wie der Browser sollte man auch alle Informationen wie er abschicken und nicht nur die hälfte.

Kharlanki 29. Jun 2007 18:08

Re: Login mit IdHTTP
 
Wie uebergebe ich denn eine Checkbox?

Kannst du mal dein Codesnippet posten?

Bei mir klappts mittlerweile manuell, indem ich die sid aus dem Cookie popel und dann die index.html?sid per Get aufrufe. Obwohl HandleRedirects auf true steht, macht IdHTTP das nicht selbst.

Luckie 30. Jun 2007 02:07

Re: Login mit IdHTTP
 
Zitat:

Zitat von Kharlanki
Die URL moechte ich nicht nennen, da ich mir hier zum Testen eine Seite mit Login ausgesucht habe, deren AGB ein automatisiertes Einloggen wohl nicht gutheissen. ;)

Und warum nimmst du keine Seite, wo das nicht verboten ist? Es ist zwar nicht illegal, aber da du gegen die AGs verstösst und der Anbieter wohl nicht sehr erfreut darüber sein wird und wir so etwa snicht unterstützen wollen, schliesse ich den Thread hier.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz