Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-05-2010
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 18
rolandoj Va por buen camino
Question Puedo puedo recibir y redirigir http con Free Pascal bajo Linux ?

Hola a todos,

Necesito ayuda para evaluar si puedo usar Free Pascal bajo Linux para resolver el siguiente problema :

Tengo un programa cliente que envía comandos POST de http a un servidor. Tanto mi servidor como mi cliente los tengo en Windows escritos con Delphi, con el servidor desarrollado bajo los TWebApplication. Necesito colocar un servidor intermedio entre mi cliente y mi servidor, el cual estará en Linux. La idea es que reciba los http, haga un preprocesamiento y luego envíe el comando http definitivo (o sea, con la modificación del preprocesamiento) al servidor Windows.

Hacer eso teniendo un servidor intermedio también en Windows me es sumamente facil; menos de hora de trabajo. Mi problema es que necesito que el servidor intermedio sea Linux. Tengo muchos años de experiencia en Delphi; pero, no tengo ni idea de Linux, ni por supuesto ninguna experiencia de programación en Linux.

Contratar a alguién para ello es mi primera opción; pero, por donde yo vivo, es dificil porque muy pocos saben programar en Linux. Sin embargo, he escuchado de Free Pascal y quiero aprovechar que una persona nos dictará un curso de Linux (no maneja la parte de programación) para ver si yo mismo puedo resolver el problema usando Free Pascal.

Lo que quiero por tanto es que me ayuden a evaluar si se justifica intentar usar Free Pascal para esto, teniendo en cuenta que no hay necesidad de desarrollar otras cosas sobre Linux y que el tiempo de que dispongo para investigar esa opción es escaso.

Agradezco cualquier sugerencia
Responder Con Cita
  #2  
Antiguo 09-05-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Lo que no he entendido bien es qué quieres hacer en ese equipo linux.
Responder Con Cita
  #3  
Antiguo 10-05-2010
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 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
  #4  
Antiguo 10-05-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Poder, seguro que se puede. Desgraciadamente yo no tengo conocimientos sobre ese tema como para ayudarte. Veamos si algún compañero puede echarte una mano.
Responder Con Cita
  #5  
Antiguo 10-05-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Con Lazarus/Free Pascal no sé, pero si la conexión la estás haciendo por HTTP puedes aprovechar las capacidades "rewrite" de algún servidor web como Apache, lighttpd, Nginx, etc. Esto consiste en configurar el servidor, a veces creando un archivo en la raíz de datos, en el cual le dices que las peticiones que cumplan ciertos requisitos se redirijan a otro camino diferente.

Para que te hagas una idea, ese "truco" lo utilizan prácticamente todos los programas de gestión de "blogs", que analizan la URL y la traducen en una petición a la página que realmente obtiene y muestra la entrada. Así puedes escribir "www.misitio.com/articulo/me_voy_de_vacaciones" en lugar de "www.misitio.com/articulo/index.php?id=me_voy_de_vacaciones".

Aquí tienes información de la Wikipedia, para que veas lo que es.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #6  
Antiguo 10-05-2010
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 18
rolandoj Va por buen camino
Gracias. Comentarios

Hola,

Muchas gracias a ambos por el interes.

El truco de redirección ya lo había estudiado; pero, está descartado. Entre otras cosas porque el Content del Post es información encriptada con algoritmo propio.

Por lo que veo el tema no es muy conocido en la comunidad; pero, quizás pueden ayudarme con esto :

Al menos, la equivalencia entre Delphi y Lazarus/Free Pascal para el tema aplicaciones Web, tanto en cliente como en servidor, existe en términos de componentes similares ?.

Lo digo porque la lista de componentes que he visto en el sitio de Free Pascal es muy diferente a los de Delphi; pero, los comentarios dicen que pasar de Delphi a Free pascal es muy facil ?
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Comparativa entre Free Pascal 2.2.0 y Turbo Pascal 7.0 esocrates Varios 2 14-07-2008 14:56:24
stringgrid , puedo recibir valores ? martita OOP 2 04-07-2005 19:21:03
manual de excepciones de object pascal para free pascal??? Garion OOP 3 27-05-2005 00:42:29
¿Cómo puedo enviar y recibir archivos vía IRC con el componente TIdIRC? DarkByte Internet 4 26-06-2004 17:54:05
Como puedo enviar y recibir imagenes por Internet JDNA Internet 4 29-03-2004 22:41:09


La franja horaria es GMT +2. Ahora son las 21:25:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi