| Autor |
Beitrag |
davide
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 09.07.09 16:17
Guten Tag Delphi-Forum User,
ich möchte mich in nächster Zeit ein bisschen mehr mit der TidHttp Komponente auseinandersetzen, da der TWebBrowser sehr langsam und sehr resourcen lastig arbeitet.
Ich hatte mit mit Hilfe des TWebBrowser ein Programm geschrieben, welches mir Neue Nachrichten, Gästebuch Einträge und Einladungen bei Schüler.cc anzeigt und ausgibt.
Dieses kalppt auch soweit, doch nun möchte ich dieses via TidHttp lösen, in der Hoffnung das dieses schneller läuft und nicht so Resourcen lastig ist.
Nun komme ich aber schon nicht beim Login weiter.
Post Daten sollten soweit vollständig sein.
Jedoch wenn ich den Post ausführe kommt nur ein teil des quellcodes wieder:
| Zitat: | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>
Schueler.CC | Home</title>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<meta http-equiv="X-UA-Compatible" content="IE=7" />
<META content="MSHTML 6.00.2600.0" name=GENERATOR>
<META NAME="description" CONTENT="">
<META NAME="keywords" CONTENT="">
<META NAME="page-type" CONTENT="Homepage">
<META NAME="robots" CONTENT="index,follow"> |
mehr gibt der einfach nicht zurück. Das selbe kommt auch wenn man einfach nur ein GET ausführt. Leider habe ich keine Ahnung, wieso dieses so ist...
CookieManager habe ich eingefügt. Die idHttp Komponente habe ich wie folgt angepasst:
Delphi-Quelltext 1: 2: 3:
| IdHTTP1.CookieManager := IdCookieManager1; IdHTTP1.HandleRedirects := true; IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10'; |
Wenn ein neues Cookie gesetzt wird, wird folgendes gemacht (ist auch nen kleiner "log" bei):
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.IdCookieManager1NewCookie(ASender: TObject; ACookie: TIdCookieRFC2109; var VAccept: Boolean); begin ACookie.Path := '/';
Memo1.Lines.Add('New Cookie:'); Memo1.Lines.Add(' Comment: '+ACookie.Comment); Memo1.Lines.Add(' Version: '+ACookie.Version); Memo1.Lines.Add(' CookieText: '+ACookie.CookieText); Memo1.Lines.Add(' ServerCookie: '+ACookie.ServerCookie); Memo1.Lines.Add(' ClientCookie: '+ACookie.ClientCookie); Memo1.Lines.Add(' Domain: '+ACookie.Domain); Memo1.Lines.Add(' Expires: '+ACookie.Expires); Memo1.Lines.Add(' CookieName: '+ACookie.CookieName); Memo1.Lines.Add(' Path: '+ACookie.Path); Memo1.Lines.Add(' Value: '+ACookie.Value); Memo1.Lines.Add(' DisplayName: '+ACookie.DisplayName); Memo1.Lines.Add(''); end; |
Die Procedure fürs Login sieht nun wie folgt aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.BtLoginClick(Sender: TObject); var Params: TStringList; begin
Params := TStringList.Create; try IdHTTP1.Get('http://www.schueler.cc/s,login,login.php');
Params.Add('email='+EdtMail.Text); Params.Add('passwort='+EdtPw.Text); Params.Add('button_login_login=Login');
Memo1.Lines.Add(IdHTTP1.Post('http://www.schueler.cc/s,login,login.php', Params));
finally Params.Free; end;
end; |
Würde mich sehr über ein bisschen Hilfe freuen.
Vielen Dank im voraus!
Mit freundlichen Grüßen
Davide
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 09.07.09 16:31
Hallo und  !
Deine Adressen sind falsch, es wird Quelltext 1:
| http://www.schueler.cc | aufgerufen, woher hast du die Adressen, die du da benutzt? Die stehen weder im Quelltext der Seite noch sonst irgendwo...
// EDIT:
Um das schnell zu sehen empfehle ich HttpFox für den FF bzw. Fiddler2 für den IE.
|
|
davide 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 09.07.09 16:37
Danke für die schnelle Antwort und das Willkommen
Ich habe es nun mit www.schueler.cc versucht, jedoch bleibt die Rückgabe von POST gleich...
Die Adressen habe ich so raus gefunden: Habe einfach mein PW falsch eingegeben und dann kam ich zu dieser Seite. In meinem Programm, wo ich es mit dem TWebBrowser gelöst habe, rufe ich auch die URL ( www.schueler.cc/s,login,login.php) auf um mich einzuloggen.
Liebe Grüße
//EDIT: Ich habe nun mal nur ein GET ausgeführt um zu sehen, ob er denn dort die ganze Seite läd bzw. den Quelltext. Aber schon da scheint ein Fehler zu sein. Denn er gibt nur folgendes aus:
| Zitat: |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>
Schueler.CC | Dein Schüler Community-Center</title>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<meta http-equiv="X-UA-Compatible" content="IE=7" />
<META content="MSHTML 6.00.2600.0" name=GENERATOR>
<META NAME="description" CONTENT="">
<META NAME="keywords" CONTENT="">
<META NAME="page-type" CONTENT="Homepage">
<META NAME="robots" CONTENT="index,follow">
|
Versucht habe ich es mit folgendem Code (ganz simple halt):
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Text := IdHTTP1.Get('http://schueler.cc'); end; |
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 09.07.09 16:53
Wenn du HttpFox einfach einmal benutzt hättest, dann hättest du dort gesehen, dass der Inhalt schlicht komprimiert zurückgeliefert wird. Dementsprechend musst du einen entsprechenden Compressor benutzen, hier TIdCompressorZLib(Ex)... 
|
|
davide 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 09.07.09 16:58
Vielen Dank für deine Hilfe
Hatte mir das Add-On für FF runtergeladen und auch kurz reingeschaut, aber hatte nicht drauf geachtet das es komprimiert zurück geschickt wird. :-[
Ich habe den IdCompressorZLib eingefügt und mit der IdHttp Komponente verbunden, jedoch kommt nicht wirklich mehr Quelltext zurück :-[ 
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 09.07.09 17:11
Am besten fordere explizit komprimiert als gzip an: Delphi-Quelltext 1:
| IndyHttp.Request.AcceptEncoding := 'gzip, deflate'; |
Versuche einmal noch Utf8ToAnsi / Utf8Decode, vielleicht wird ja UTF-8 zurückgegeben, darauf habe ich gar nicht geachtet eben.
|
|
davide 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 09.07.09 17:18
Hab nun folgendes alles ausprobier:
Versuch 1:
Delphi-Quelltext 1:
| IndyHttp.Request.AcceptEncoding := 'gzip, deflate'; |
Versuch 2:
Delphi-Quelltext 1:
| IndyHttp.Request.AcceptEncoding := 'Utf8ToAnsi'; |
Versuch 3:
Delphi-Quelltext 1:
| IndyHttp.Request.AcceptEncoding := 'Utf8Decode'; |
leider alles ohne erfolg  Immer nur ein teil des Quelltextes wird zurückgeliefert...
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 09.07.09 17:20
|
|
davide 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 09.07.09 17:25
ups :-[
ok habe es nun so ausprobiert auch mal mit den unterschiedlichen Funktionen, aber leider bekomme ich immer noch nicht mehr zurück...
Bin dir echt dankbar für die super Hilfe 
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 09.07.09 17:46
So, ich habe es gerade einmal kurz ausprobiert...
Wenn du in Delphi einmal schaust, dann siehst du sofort im Debugger, dass da nur ein Nullzeichen im Ergebnis zurückgegeben wird an der Stelle wo nichts weiter angezeigt wird, siehe Anhang...
Das musst du nur ersetzen, dann klappt auch die Anzeige.  Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var i: Integer; IndyResult: string;
[...]
IndyResult := IdHTTP1.Post('http://www.schueler.cc/s,login,login.php', Params); for i := 1 to Length(IndyResult) do if IndyResult[i] = #0 then IndyResult[i] := ' '; Memo1.Text := IndyResult; |
Einloggen, um Attachments anzusehen!
|
|
davide 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 09.07.09 17:59
wow =) Es klappt =) Und ich werde auch eingeloggt =)
Muss ich das nun bei jeder abfrage machen? Dieses #0 ersetzen?
Aber vielen vielen Dank für die super Hilfe!
Nun kann ich endlich weitermachen.
Wie kann ich mich revanchieren ?
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 09.07.09 18:28
|
|
|