Einfacher HTTP-Request mit Carbon

Alle Fragen zur Netzwerkkommunikation
K.S.M.
Beiträge: 9
Registriert: Sa 30. Jan 2010, 01:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Einfacher HTTP-Request mit Carbon

Beitrag von K.S.M. »

Hi! :)
Ich bin neu in diesem Forum und interessiere mich sehr für die Entwicklung mit Lazarus. Habe vorher immer mit Delphi gearbeitet und dort Indy benutzt. Allerdings habe ich damit auf meinem iMac und mit Lazarus etw. Probleme und suche nach möglichen Alternativen. Könnt ihr mir helfen?

Lg KSM

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Einfacher HTTP-Request mit Carbon

Beitrag von Euklid »

Hallo KSM, willkommen im Forum!

Zu Lazarus in Kombination mit Indy gibt es folgende Hilfe-Seite: http://wiki.freepascal.org/Indy_with_Lazarus" onclick="window.open(this.href);return false;
Nach verschiedenen Aussagen hier im Forum läuft Synapse besser: http://www.ararat.cz/synapse/doku.php" onclick="window.open(this.href);return false;

Viele Grüße, Euklid

K.S.M.
Beiträge: 9
Registriert: Sa 30. Jan 2010, 01:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Einfacher HTTP-Request mit Carbon

Beitrag von K.S.M. »

Vielen Dank für die schnelle Antwort! :)
ich habe mir jetzt die synapse.zip gedownloadet und den "lib" ordner in lazarus/components kopiert, allerdings erkennt er die units nicht. oder müssen die Pascal-Dateien woanders hin?

lg KSM

Benutzeravatar
theo
Beiträge: 10934
Registriert: Mo 11. Sep 2006, 19:01

Re: Einfacher HTTP-Request mit Carbon

Beitrag von theo »

K.S.M. hat geschrieben:Vielen Dank für die schnelle Antwort! :)
ich habe mir jetzt die synapse.zip gedownloadet und den "lib" ordner in lazarus/components kopiert, allerdings erkennt er die units nicht. oder müssen die Pascal-Dateien woanders hin?
Entweder du nimmst den Pfad in dein Projekt auf (Bei den Compilereinstellungen / Pfade / andere Units), oder du installierst das Package was ich hier einmal gepostet hatte: http://forum.lazarus.freepascal.org/ind ... l#msg33281" onclick="window.open(this.href);return false; (Die Datei in den Synapse Quellordner legen und das lpk installieren).
Dann im ProjektInspektor als neue Anforderung hinzufügen.

Die letztere Variante ist die "saubere".

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Einfacher HTTP-Request mit Carbon

Beitrag von creed steiger »

Wie,erkennt sie nicht?
In den Projekt-Compilereinstellungen andere Units hast du den Pfad aber schon eingetragen,oder?
Edit:
Hm,Theo war ein bissl schneller ;)

K.S.M.
Beiträge: 9
Registriert: Sa 30. Jan 2010, 01:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Einfacher HTTP-Request mit Carbon

Beitrag von K.S.M. »

Ah alles klar :)
So, allerdings beim Probieren der "sauberen" Methode krieg ich beim installieren des Package immer den Fehler "Mehrdeutige Units gefunden" bezogen auf die fastcgi.pp. Die hab ich aber iwie auch zweimal, einmal im lazarus-Ordner (/lazarus/fastcgi) UND in den fpc-Quelltexten (/fpc/source/packages/fastcgi/). Wie kann ich dieses Problem beheben? Das hatte ich schon einmal als ich ein package kompilieren/installieren wollte ...

Edit: Hab eben die unsaubere Methode ausprobiert. Die funktioniert leider auch nicht, er findet zwar die units allerdings spuckt er Compiler-Fehler aus:

Code: Alles auswählen

/Developer/lazarus/components/synapse/ssfpc.pas(252,39) Error: Identifier not found "MSG_NOSIGNAL"
/Developer/lazarus/components/synapse/ssfpc.pas(252,39) Error: Illegal expression
Edit2: Hab jetzt mal "MSG_NOSIGNAL" durch $0003 ersetzt (in der hoffnung, dass es richtig ist...) jetzt lässt es sich jdfalls kompilieren ;)

K.S.M.
Beiträge: 9
Registriert: Sa 30. Jan 2010, 01:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Einfacher HTTP-Request mit Carbon

Beitrag von K.S.M. »

So, okay, das mit den Packages muss ich dann wohl iwie mal lösen ... jdfalls läuft es erstmal so. Nur ich verstehe nicht so ganz, was ich bei THTTPSend.ProxyHost und THHTPSend.ProxyPort anzugeben habe. Ich habe mal die Demo ausprobiert und da muss man ja was angeben. Lasse ich die Felder leer, friert das Programm für ne Weile ein und nix passiert...

Benutzeravatar
theo
Beiträge: 10934
Registriert: Mo 11. Sep 2006, 19:01

Re: Einfacher HTTP-Request mit Carbon

Beitrag von theo »

Probier vllt. erst mal die simplen Funktionen aus, z.B. HttpGetText
http://synapse.ararat.cz/doc/help/https ... ttpGetText" onclick="window.open(this.href);return false;
Du brauchst dazu kein THTTPSend createn.

Das mit dem MSG_NOSIGNAL bei Mac ist bekannt. Das kannst du schon mal so lassen zum testen. Ist scheint's nicht 100% sauber, sollte aber im Normalfall kein Problem sein.
U.u ist es in trunk auch gelöst (k.A.) http://synalist.svn.sourceforge.net/vie ... z?view=tar" onclick="window.open(this.href);return false;

P.S. dass die Fkt. die Anwendung blockiert, liegt in der Natur der Sache (Blocking Sockets).
Sie kehrt erst zurück, wenn das Resultat da ist (Oder OnStatus gibt's auch Rückmeldungen http://synapse.ararat.cz/doku.php/public:howto:onstatus" onclick="window.open(this.href);return false;)
Abhilfe: Threads.

K.S.M.
Beiträge: 9
Registriert: Sa 30. Jan 2010, 01:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Einfacher HTTP-Request mit Carbon

Beitrag von K.S.M. »

Hey Theo, vielen Dank für deine Antwort! :)

Dann werde ich mir das mal anschaun. Ne idee, wie man das mit dem fastcgi beheben kann, haste nicht, oder?

Lg und noch ein schönes Wochenende!

Benutzeravatar
theo
Beiträge: 10934
Registriert: Mo 11. Sep 2006, 19:01

Re: Einfacher HTTP-Request mit Carbon

Beitrag von theo »

K.S.M. hat geschrieben:Ne idee, wie man das mit dem fastcgi beheben kann, haste nicht, oder?
Anscheinend nicht, ich weiss nicht mal wovon du sprichst. Habe nie mit fastcgi zu tun gehabt.

K.S.M.
Beiträge: 9
Registriert: Sa 30. Jan 2010, 01:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Einfacher HTTP-Request mit Carbon

Beitrag von K.S.M. »

Hmm, ich habe jetzt die Funktion mal angewendet, allerdings gibt sie immer "False" zurück. Hier mein Quelltext:

Code: Alles auswählen

procedure TForm1.btnStartClick(Sender: TObject);
var
  Str: TStringStream;
begin
  Str := TStringStream.Create('');
  try
    if not HttpGetBinary( 'http://www.phoenixsystems.de/test/index.php?req=Moin', Str ) then
       ShowMessage('Fehler!');
    View.Lines.Add( Str.DataString );
  finally
    Str.Free;
  end;
end;
Die Internetadresse, auf die diese URL verweist, ist eine Test-PHP-Datei, die die IP- und den Inhalt von "req" wiedergibt. Aber der Request scheint nicht zu funktionieren. Ich bekomme auch keine Fehlermeldungen. Nur Die ShowMessage wird angezeigt. Was kann ich da machen?

Benutzeravatar
theo
Beiträge: 10934
Registriert: Mo 11. Sep 2006, 19:01

Re: Einfacher HTTP-Request mit Carbon

Beitrag von theo »

Weiss ich nicht, bei mir funktioniert dein Code.
Hallo, 193.72.35.98! Du hast "Moin" geschrieben.
Hat zwar damit nichts zu tun, aber wieso verwendest du HttpGetBinary statt HttpGetText ?

Das kann jetzt entweder mit deinem System zusammenhängen (Security Software?) oder vllt. funzt Synapse mit Mac doch nicht so richtig.

Kopier mal die Funktion in deine eigene Unit, und schau dann die LastErrorDesc an.

Code: Alles auswählen

function HttpGetText(const URL: string; const Response: TStrings): Boolean;
var
  HTTP: THTTPSend;
begin
  HTTP := THTTPSend.Create;
  try
    Result := HTTP.HTTPMethod('GET', URL);
    ShowMessage(HTTP.Sock.LastErrorDesc); //Hier eingefügt
    if Result then
      Response.LoadFromStream(HTTP.Document);
  finally
    HTTP.Free;
  end;
end;

K.S.M.
Beiträge: 9
Registriert: Sa 30. Jan 2010, 01:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Einfacher HTTP-Request mit Carbon

Beitrag von K.S.M. »

Hmm, also als Fehler wird gemeldet: "Connection reset by peer".

Benutzeravatar
theo
Beiträge: 10934
Registriert: Mo 11. Sep 2006, 19:01

Re: Einfacher HTTP-Request mit Carbon

Beitrag von theo »

K.S.M. hat geschrieben:Hmm, also als Fehler wird gemeldet: "Connection reset by peer".
Hmm, das heisst normalerweise, dass dich der Server "abhängt".
Das ist zwar eigentlich bei HTTP 1.0 nicht unnormal, aber auf Linxu geht's.
Ob das wohl was mit dem Mac zu tun hat?


Probier mal testweise so:

HTTP := THTTPSend.Create;
HTTP.Protocol:='1.1';
HTTP.KeepAlive:=true;
etc.

http://synapse.ararat.cz/doc/help/https ... l#Protocol" onclick="window.open(this.href);return false;

K.S.M.
Beiträge: 9
Registriert: Sa 30. Jan 2010, 01:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Einfacher HTTP-Request mit Carbon

Beitrag von K.S.M. »

theo hat geschrieben: Probier mal testweise so:

HTTP := THTTPSend.Create;
HTTP.Protocol:='1.1';
HTTP.KeepAlive:=true;
etc.

http://synapse.ararat.cz/doc/help/https ... l#Protocol" onclick="window.open(this.href);return false;
Hat leider auch nix gebracht :( selber Fehler...
Ich meine, Mac beruht doch eig vollständig auf UNIX, ich verstehe nicht so ganz, dass es nicht funktioniert. Oder kann es sein, dass der Mac die Verbindung "blockiert"? Gibt es so etwas wie ein Firewall unter Mac?

Antworten