Ver Mensaje Individual
  #3  
Antiguo 10-05-2010
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Reputación: 18
rolandoj Va por buen camino
Más detalles

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
    { Private declarations }
    Function EnviarPostRequest(AnURL,AText:String):String;
    Function Preprocesar(AText:String):String;
  public
    { Public declarations }
  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
     { Aqui el preprocesazmiento }
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' {WebModuleEnLinux: TWebModule};
{$R *.res}
exports
  GetExtensionVersion,
  HttpExtensionProc,
  TerminateExtension;
begin
  { CoInitFlags := COINIT_MULTITHREADED; }
  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
Responder Con Cita