Hola,
Muchas gracias por el interés. Explicó mejor :
La idea es tener una Web server application en Linux que reciba las peticiones http, las descomponga, transforme la petición en sí, y genere una nueva petición, que es la que devolverá finalmente el resultado.
A continuación voy a colocar un ejemplo simplificado de lo que sería el módulo Web en Delphi, y al final comento un poco más
Código Delphi
[-]unit UWMEnLinux;
interface
uses
SysUtils, Classes, HTTPApp, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP;
type
TWebModuleEnLinux = class(TWebModule)
IdLnxHTTP: TIdHTTP;
procedure WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
private
Function EnviarPostRequest(AnURL,AText:String):String;
Function Preprocesar(AText:String):String;
public
end;
var
WebModuleEnLinux: TWebModuleEnLinux;
implementation
{$R *.dfm}
Function TWebModuleEnLinux.EnviarPostRequest(AnURL,AText:String):String;
Var
Response: TStringStream;
TheLines: TStringStream;
Begin
Try
Response := TStringStream.Create('');
Try
TheLines := TStringStream.Create(AText);
IdLnxHTTP.Post(AnURL,TheLines,Response);
EnviarPostRequest := Response.DataString;
Finally
TheLines.Free;
End;
Finally
Response.Free;
End;
End;
Function TWebModuleEnLinux.Preprocesar(AText:String):String;
Begin
End;
procedure TWebModuleEnLinux.WebModuleBeforeDispatch(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
Var
TheNewDomain: String;
TheNewContent: String;
TheNewRequest: String;
begin
TheNewDomain := 'http://www.midominiointerno.com/midirectorio/';
TheNewContent := Preprocesar(Request.Content);
TheNewRequest := TheNewDomain + Request.PathInfo ;
Response.Content := EnviarPostRequest(TheNewRequest,TheNewContent);
Handled := True;
end;
end.
Como puedes apreciar, el corazón es simplemente el evento BeforeDispatch. La petición en sí es el Request.Content, yo llamaría una función que reciba ese valor y lo transforme en una nueva petición (un nuevo Content). Ahí también respeto el pathinfo y cambio el dominio al de mi servidor Windows. Finalmente, usando Indy efectuo un nuevo Post en el método EnviarPostRequest (por supuesto esa rutina es muy simplificada respecto a la real; pero, creo que ilustra la idea).
Lo que quiero saber es si puedo escribir con Free Pascal, o similar, una rutina así de simple en Linux. En caso de poderse, agradecería cualquier ayuda de cuales componentes debería buscar para ello, así como cualquier sugerencia básica. Si piensas que hacerlo tomaría mucho tiempo, y que es mejor que busque a alguien para que escriba ese programa, agradecería el consejo
Por cierto, y para una mayor claridad, el dpr de esta librería en Delphi es :
Código Delphi
[-]library WMEnLinux;
uses
ActiveX,
ComObj,
WebBroker,
ISAPIApp,
ISAPIThreadPool,
UWMEnLinux in 'UWMEnLinux.pas' ;
{$R *.res}
exports
GetExtensionVersion,
HttpExtensionProc,
TerminateExtension;
begin
Application.Initialize;
Application.CreateForm(TWebModuleEnLinux, WebModuleEnLinux);
Application.Run;
end.
Nota : La línea CoInitFlags la genera Delphi; pero, yo siempre la pongo en comentarios por algún problema que me dió hace tiempo y del cual ya no me acuerdo
Saludos