CgiApp depracted?

Rund um die LCL und andere Komponenten

CgiApp depracted?

Beitragvon Timm Thaler » 7. Aug 2017, 17:29 CgiApp depracted?

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?
Timm Thaler
 
Beiträge: 439
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Warf » 7. Aug 2017, 17:40 Re: CgiApp depracted?

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.
Warf
 
Beiträge: 621
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Timm Thaler » 7. Aug 2017, 18:01 Re: CgiApp depracted?

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.
Timm Thaler
 
Beiträge: 439
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Warf » 7. Aug 2017, 19:26 Re: CgiApp depracted?

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
Warf
 
Beiträge: 621
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Timm Thaler » 7. Aug 2017, 21:29 Re: CgiApp depracted?

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.
Timm Thaler
 
Beiträge: 439
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Warf » 7. Aug 2017, 22:30 Re: CgiApp depracted?

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
Warf
 
Beiträge: 621
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried