Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi idhttp - gibt es ein gutes Tutorial? (https://www.delphipraxis.net/89188-idhttp-gibt-es-ein-gutes-tutorial.html)

Evian 27. Mär 2007 09:21


idhttp - gibt es ein gutes Tutorial?
 
Hallo Zusammen,

ich spiele gerade mit der idhttp-Komponente (Indy 9) rum und will versuchen mich bei mySpace.com einzuloggen um mögliche Nachrichten abzugreifen. Da das ganze ein wenig komplizierter ist, das ich ursprünglich angenommen hatte, wollte ich mal fragen, ob vielleicht jemand ein gutes Tutorial dazu kennt? Und bitte nicht das hier (http://www.dsdt.info/tutorials/indy/) ... das ist wirklich sehr rudimentär.

---


Mein eigentliches Problem ist folgendes:

Ich möchte mich per http post in das portal einloggen:

Delphi-Quellcode:
var
  PostInformationStream : TStringStream;
  Parameter : TStringStream;
begin
  idhttp1.HandleRedirects:=true;
  PostInformationStream := TStringStream.Create('');
  Parameter := TStringStream.Create('');
  Parameter.WriteString('fuseaction=login.process');
  Parameter.WriteString('email=XYZ');
  Parameter.WriteString('password=ZYX');
  try
    IdHTTP1.Post('http://login.myspace.com/index.cfm', Parameter, PostInformationStream);
    Memo1.Text := PostInformationStream.DataString;
  finally
  Parameter.Free;
  PostInformationStream.Free;
  end;
end;
Als Antwort lande ich immer auf der Seite, auf die man kommt, wenn man sein Passwort falsch eingegeben hat.
Wenn ich mir die Formulareigenschaften der Loginseite von Myspace in Firefox anzeigen lasse, dann ist die Formular-Aktion
des Login-formulars "http://login.myspace.com/index.cfm?fuseaction=login.process&MyToken=1d833b1 7-a90a-4cee-b7dd-ae58c4470d77".
Diesen Token (der immer neu generiert wird), habe ich bei meinen Parametern gar nicht angegeben.. aber ich weiß auch nicht, wie ich ihn vorher auslesen könnte. Hat jemand eine Idee?!

gruß Phill

SirThornberry 27. Mär 2007 09:32

Re: idhttp - gibt es ein gutes Tutorial?
 
es liegt eben an diesem Token würde ich sagen. Wie dir schon aufgefallen ist findet sich dieser Token auf der Seite wo du dich einloggst. Also musst du diese Seite vorher abfragen und den Token daraus extrahieren (Seite also parsen).

Ein Tutorial zu idhttp kenn ich nicht. Aber so viel gibt es da auch nicht das man ein Tutorial bräuchte.

Angel4585 27. Mär 2007 10:18

Re: idhttp - gibt es ein gutes Tutorial?
 
versuchs mal so:

Delphi-Quellcode:
var
lData : TIdMultiPartFormDataStream;
sl : TStringList;
begin
lData := TIdMultiPartFormDataStream.Create;//Struktur erzeugen
  try
    lData.AddFormField('Name','Wert');//Feld hinzufügen
    with idhttp1 do
      begin
      sl:=TStringList.Create;
      sl.Text := Post(URL,lData);
      //Irgendwas tun mit sl...
      end;
  finally
    sl.Free;
    lData.Free;
    end;

Evian 27. Mär 2007 10:57

Re: idhttp - gibt es ein gutes Tutorial?
 
Ich habe jetzt sowohl den Token ausgelesen, als auch die 2te Methode mit dem probiert... leider schaffe ich es immernoch nicht mich einzuloggen.

Delphi-Quellcode:
Function TForm1.getToken: String;
VAR
token : String;
BEGIN
     Token := idHTTP1.Get('http://www.myspace.com/');
     Token := copy(Token,pos('http://login.myspace.com/index.cfm?fuseaction=login.process&MyToken=',Token)+68,length(Token));
     result := copy(Token,1,pos('" method="post"',Token)-1);
END;

Procedure Tform1.Logintest1;
var
  ParamData : TStringStream;
  token : String;
begin
  idhttp1.HandleRedirects:=true;
  ParamData := TStringStream.Create('');
  try
     Token := getToken;
  finally
    try
      ParamData.WriteString('fuseaction=login.process');
      ParamData.WriteString('MyToken='+Token);
      ParamData.WriteString('email=XYZ');
      ParamData.WriteString('password=ZYX');

     Memo1.Text := IdHTTP1.Post('http://login.myspace.com/index.cfm',ParamData);
    finally
    ParamData.Free;
    end;
  end;
end;

Procedure Tform1.Logintest2;
var
  lData : TIdMultiPartFormDataStream;
  token : String;
begin
   idhttp1.HandleRedirects:=true;
   lData := TIdMultiPartFormDataStream.Create;//Struktur erzeugen
  try
     Token := getToken;
  finally
    try
      lData.AddFormField('fuseaction','login.process');
      lData.AddFormField('MyToken',Token);
      lData.AddFormField('email','XYZ');
      lData.AddFormField('password','ZYX');
      Memo1.Text := IdHTTP1.Post('http://login.myspace.com/index.cfm',lData);
    finally
    lData.free;
    end;
  end;
end;

Evian 27. Mär 2007 14:46

Re: idhttp - gibt es ein gutes Tutorial?
 
Naja mir ist das dann jetzt doch ein wenig zu aufwändig... habs zwar jetzt geschafft, mich einzuloggen, aber nicht die Session aufrecht zu erhalten. Mach das ganze jetzt mit dem TWebbrowser... der ist zwar um einiges langsamer, aber eben 1000x einfacher zu handeln.

Delphi-Quellcode:
procedure tform1.Login;
VAR
  Document: Variant;
BEGIN
  Document := Webbrowser1.Document;
  Document.forms.item(1).elements.item(1).value := 'Email@Email.de';
  Document.forms.item(1).elements.item(2).value := 'Passwort';
  Document.forms.item(1).submit();
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 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