CgiApp depracted?

Rund um die LCL und andere Komponenten
Antworten
Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

CgiApp depracted?

Beitrag von Timm Thaler »

Ich habe hier ein Grundgerüst für CGI-Anwendungen - die auch funktionieren - basierend auf der CgiApp-Unit (https://github.com/graemeg/freepascal/b ... /cgiapp.pp). Allerdings sagt mir der Compiler, dass da so ziemlich alles depracted ist.

Code: Alles auswählen

program cgiweb;
 
uses
  ...
  CgiApp;
 
type
  Tcgi = class(TCGIApplication)
    procedure DoRun; override;
  end;
 
// Abfrage auswerten
 
procedure Tcgi.DoRun;
var
  list : TStrings;
  i : integer;
begin
  list := TStringList.Create;
  try
    if (RequestVariableCount > 0) then  // is depracted
    begin
      GetRequestVarList(list, true)// is depracted
      for i := 0 to list.Count - 1 do
      begin
         ... // diverse Abfragen
            ContentType := 'text/html; charset=iso-8859-1'// is depracted
            EmitContentType()// is depracted
        ... // diverse Ausgaben
      end;
    end;
  finally
    Terminate;
  end;
end;
 
// Hauptprogramm
 
begin
  with Tcgi.Create(nil) do  // is depracted
    try
      Title := 'Web';
      Initialize;  // is depracted
      Run;
    finally
      Free;
    end;
end.


Sollte mir das zu denken geben? Die CGIs funktionieren soweit, laut github ist das Projekt Stand 2014.

Ich hab mir auch fcl-web (http://wiki.lazarus.freepascal.org/fcl-web) angesehen, aber bin da nicht durchgestiegen. Ist doch ein ganzes Stück aufwendiger als die CgiApp.

Bevor ich da weitere CGIs baue: Spricht etwas gegen die CgiApp, sollte ich auf fcl-web umsteigen?

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: CgiApp depracted?

Beitrag von Warf »

Das FCL-Web Paket sieht auf den ersten blick recht kompliziert aus, aber es ist eigentlich ganz einfach. Vor allem weil die WebModules austauschbar zwischen den FCL Web Anwendungen sind. Somit kannst du halt deine Software mit einem Webserver Projekt Entwicklen (was viel einfacher zu debuggen ist), und dann die Webmodules einfach in einem CGI oder FastCGI Projekt verwenden, ohne den Code ändern zu müssen. Nach 1-2 Stunden reinarbeiten sollte eigentlich alles kein Problem sein.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: CgiApp depracted?

Beitrag von Timm Thaler »

Hast Du dafür ein Tutorial oder Beispiele, die über das auf der fcl-web-Wikiseite hinausgehen?

Meine Anwendung sieht zur Zeit so aus: Aufruf des cgi auf einer Webseite mit Übergabe eines Query-Strings, Rückgabe von SVG-Grafik oder HTML-Text, der in der Webseite eingebettet wird. Ich will also keine komplette Webseite zurückgeben, sondern nur einzubettende Objekte.

Code: Alles auswählen

<img id="img1" src="cgi-bin/web.cgi?q=diag-1" />
bekommt dann ein SVG zurückgeliefert, welches über JS alle paar Minuten erneuert wird.

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: CgiApp depracted?

Beitrag von Warf »

Wo ist denn das Problem mit dem Wiki Eintrag?

Für dein Beispiel habe ich grade mal schnell ein WebModule geschrieben, einfach ins onRequest Event:

Code: Alles auswählen

 
procedure TFPWebModule1.DataModuleRequest(Sender: TObject; ARequest: TRequest;
  AResponse: TResponse; Var Handled: Boolean);
var req: String;
begin
  req:=ARequest.QueryFields.Values['q'];
  AResponse.ContentType:='image/svg+xml';
  AResponse.ContentStream:=TMemoryStream.Create;
  try
    (AResponse.ContentStream as TMemoryStream).LoadFromFile('./img/'+req+'.svg');
    AResponse.ContentLength:=AResponse.ContentStream.Size;
    AResponse.SendContent;
  finally   
    AResponse.ContentStream.Free;
  end


Ausprobiert, und alles läuft. Bei aufruf von 127.0.0.1/q=test, hat er mir problemlos die Datei test.svg aus dem img Ordner zurückgegeben.

Weitere Beispiele findest du hier

Eigentlich sollte das alles selbsterklärend sein

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: CgiApp depracted?

Beitrag von Timm Thaler »

Warf hat geschrieben:Bei aufruf von 127.0.0.1/q=test, hat er mir problemlos die Datei test.svg aus dem img Ordner zurückgegeben.


Soweit ich mich erinnere war das der Punkt wo ich nach einer anderen Lösung gesucht habe: fcl-web bietet halt gleich einen kompletten Webserver mit eingebundenen Web-Modulen. Ich hab aber auf dem Raspberry schon einen Webserver laufen, der statische HTML-Seiten ausliefert, und brauche "nur noch" die CGIs, die mir auf Anfrage des vorhandenen Webservers die Daten liefern.

Die Lösung, die ich damals gefunden habe war den fcl-web auf einem anderen Port 8080 laufen zu lassen, aber dann habe ich zwei Webserver parallel laufen. Das schien mir nicht sinnvoll.

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: CgiApp depracted?

Beitrag von Warf »

Timm Thaler hat geschrieben:Soweit ich mich erinnere war das der Punkt wo ich nach einer anderen Lösung gesucht habe: fcl-web bietet halt gleich einen kompletten Webserver mit eingebundenen Web-Modulen. Ich hab aber auf dem Raspberry schon einen Webserver laufen, der statische HTML-Seiten ausliefert, und brauche "nur noch" die CGIs, die mir auf Anfrage des vorhandenen Webservers die Daten liefern.

Die Lösung, die ich damals gefunden habe war den fcl-web auf einem anderen Port 8080 laufen zu lassen, aber dann habe ich zwei Webserver parallel laufen. Das schien mir nicht sinnvoll.


Diese Webmodules kannst du sowohl in einer Webserver Anwendung, einer CGI Anwendung, oder eine Fast CGI Anwendung laufenlassen. Der Webserver ist halt am besten zum Debuggen, aber wenn du damit fertig bist, einfach neues Projekt: CGI Anwendung -> Modules reinladen -> Kompilieren, und läuft genau wie der Webserver ohne Änderungen an der Logik

Antworten