Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   INDY 10.2.0.3 - Post Send - IdHTTP (https://www.delphipraxis.net/157770-indy-10-2-0-3-post-send-idhttp.html)

Pascal95 24. Jan 2011 15:39

INDY 10.2.0.3 - Post Send - IdHTTP
 
Hallo,

ich hoffe, dass ich hier im richtigen Sub-Forum gelandet bin.


Ich habe ein Problem mit der Indy Komponente für Freepascal.

So versuche ich, Daten per "Post" an ein PHP-Formular zu senden.
Mir ist dabei aufgefallen, dass es bisher nur bei /normalen/ HTTP Seiten funktioniert.

Hier (Test-PHP) habe ich mal ein Beispiel hochgeladen.
Wenn man an diese Datei per Post Daten ("x=Hallo") sendet, funktioniert es auch.

Bei Https funktioniert das aber nicht so sehr:
Wenn ich z.B. Daten an Facebook.de sende:
Zitat:

charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2% B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84&lsd=aAcaf&locale= de_DE&email=*email*&pass=*pass*&default_persistent =0&charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C% C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84&lsd=aAcaf
Dann kommt nichts zurück.


Es funktioniert weder mit "Ararat Synapse" noch mit "Indy", das ich allgemein sehr bevorzuge.


INDY:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: TStringList;
  v: TMemoryStream;
begin
  s:= TStringList.Create;
  v:= TMemoryStream.Create;

  s.Add('charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84');
  s.Add('lsd=-uGj9');
  s.Add('locale=de_DE');
  s.Add('email=*mail-zensiert*');
  s.Add('pass=*pass-zensiert*');
  s.Add('default_persistent=0');

  IdHTTP1.Post('http://login.facebook.com/login.php?login_attempt=1', s, v);
  ShowMessage(MemoryStreamToString(v));

  s.Free
end;
Das Programm hängt sich einfach auf!



Synapse:
Code:
function GetPOSTResult(Pfad, Postdata: String; ResultStrings:TStringList):Boolean;
var
  Str: TMemoryStream;
begin
  Result:=False;
  ResultStrings.Clear;

  Str := TMemoryStream.Create;
  try
    if HttpPostURL(Pfad, Postdata, Str) then begin
      ResultStrings.LoadFromStream(Str);
      Result:=True;
    end;
  finally
    Str.Free;
  end;
end;
Hier kommt einfach nichts (nil) an!


Es wäre nett, wenn mir einer helfen könnte :) :) !!!


Pascal

Pascal95 25. Jan 2011 13:37

AW: INDY 10.2.0.3 - Post Send - IdHTTP
 
Wenn ich die https - Daten mit Hilfe von
Delphi-Quellcode:
idHTTP1.Get('https://www.facebook.com');
einhole, erscheint die Meldung: "HTTP/1.0 302 Found".
Handleredirects ist übringens auf False; soll das vielleicht umgestellt werden?

Pascal95 25. Jan 2011 14:19

AW: INDY 10.2.0.3 - Post Send - IdHTTP
 
Gibt es Alternativen?

JamesTKirk 25. Jan 2011 15:09

AW: INDY 10.2.0.3 - Post Send - IdHTTP
 
Zitat:

Zitat von Pascal95 (Beitrag 1077189)
Wenn ich die https - Daten mit Hilfe von
Delphi-Quellcode:
idHTTP1.Get('https://www.facebook.com');
einhole, erscheint die Meldung: "HTTP/1.0 302 Found".
Handleredirects ist übringens auf False; soll das vielleicht umgestellt werden?

Das ist vielleicht ne Idee. 302 heißt nämlich, dass die Seite unter "/" nicht zu finden ist, der Browser dir jedoch die neue/richtige Seite mitteilt.

Mehr kann ich dir leider nicht helfen, da ich kein Indy verwende.

Gruß,
Sven

Pascal95 25. Jan 2011 15:43

AW: INDY 10.2.0.3 - Post Send - IdHTTP
 
Erstmal vielen Dank für die Bemühungen!
Ich bin auch ein bisschen weiter gekommen, habe mich zur Fehlermeldung (HTTP-Statusmeldungen) erkundigt. Allerdings kam bei der Seite "http://login.facebook.com/login.php?params" ja auch die Meldung.

Ich habs jetzt noch so verändert, dass ich einen IOHandler zur IdHTTP hinzugefügt habe: TIdSSLIOHandlerSocketOpenSSL. Das Ding ist wohl für HTTPS Verbindungen zuständig.
Leider erscheint dann die Meldung: "Could not load SSL Library"

Der Code sieht jetzt so aus:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: TStringList;
  v: TMemoryStream;
begin
  s:= TStringList.Create;
  v:= TMemoryStream.Create;

  s.Add('charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84');
  s.Add('lsd=-uGj9');
  s.Add('locale=de_DE');
  s.Add('email=*xxx*%40live.de');
  s.Add('pass=*xxx*');
  s.Add('default_persistent=0');

  IdHTTP1.Post('https://login.facebook.com/login.php?login_attempt=1', s, v);

  ShowMessage(MemoryStreamToString(v));

  s.Free
end;
Das
Delphi-Quellcode:
IdHTTP1
hat auch den IOHandler
Delphi-Quellcode:
IdSSLIOHandlerSocketOpenSSL1
.

Dem IdSSLIOHandlerSocketOpenSSL1 habe ich allerdings keine weiteren Eigenschaften im Objektinspektor verliehen.


Vielen Dank!

H3llsing 25. Jan 2011 15:55

AW: INDY 10.2.0.3 - Post Send - IdHTTP
 
Hey,

Ich hab das gleiche mal versucht, dazu ist zu sagen dass ich mich mit Idhttp noch nicht wirklich beschäftigt habe.
Bei meinen Recherchen bin ich dann auf eine Unit gestoßen die ich bei embarcadero gefunden habe für Delphi 2010.
Sie soll viele Facebook Funktionen enthalten.

Dazu hab ich noch gelesen dass man erst ein SSL Certifikat auswählen und einspeisen muss da es ne gesicherte Verbindung ist.

Tut mir leid, dass ich dir nichts genaueres sagen kann ;)
hier der Link
Facebook api auf Embarcadero

und sonst einfach mal nach Idhttp und SSL suchen :)

Pascal95 25. Jan 2011 16:02

AW: INDY 10.2.0.3 - Post Send - IdHTTP
 
Hallo,
vielen Dank.
Ich schaue es mir mal an.
Außerdem benutze ich Lazarus (+FPC 2.2.4)
Werde dann Bescheid geben, was rausgekommen ist.

Edit:
Ok, der Artikel ist wirklich hilfreich. Ich wusste garnicht, dass Facebook eine vernünftige API hat.
Allerdings muss ich noch die Zertifikate in mein Programm einbinden. Ich habe da unter IdSSLIOHandlerSocketOpenSSL1.SSLOptions was gefunden - und zwar die Werte CertFile/KeyFile
http://img214.imageshack.us/img214/7940/sslo.png. Da müsste man wohl gewisse Daten einfügen.
Nur welche? Darauf kommt's jetzt an...

Danke

Pascal95 27. Jan 2011 15:05

AW: INDY 10.2.0.3 - Post Send - IdHTTP
 
Hallo,
ich habe jetzt herausgefunden, dass man diese DLLs braucht, die im Projektverzeichnis sein müssen. So gehts aber auch noch nicht - HTTP/1.0 302 Found.
Jetzt habe ich mir hier die openssl.pas heruntergeladen. Wenn ich sie dann über "uses" ins Projekt einbinde, und die DLLs (libeay32.dll, ssleay32.dll, zlib1.dll) im selben Verzeichnis sind - erstelle ich folgenden Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if InitSSLInterface then
    ShowMessage('OK!')
  else
    ShowMessage('Fehler!');
end;
Es erscheint "Ok", den Quellcode habe ich aus der example, die bei "openssl für Lazarus" dabei war.

Wie kann ich jetzt fortfahren?
Was bringt mir die openssl.pas, die ich jetzt mit eingebunden habe?

Edit: Ich probiere gerade auch mit IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method rum und erzeuge so andere Fehlermeldungen -> es ähnelt sehr diesem Beitrag aus dem Forum: IdIRC und SSL.
Danke sehr!

Edit2: Jetzt habe ich "IdHTTP2.Handleredirects" auf TRUE gestellt -> andere Fehlermeldung: Connection closed gracefully. - Verbindung erfolgreich geschlossen, warum das denn? Das wollte ich nicht!

Pascal


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