Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-12-2015
ramonigimenez ramonigimenez is offline
Miembro
 
Registrado: ago 2015
Posts: 11
Poder: 0
ramonigimenez Va por buen camino
LAZARUS Enviar datos a PHP usando TFPHTTPClient.

Hola, Amigos

Tengo el siguiente desafió;
Tengo que hacer una aplicación que haga lo siguiente;
Validar un usuario contra un página php y si esta ok ejecutar un exe que debe estar dentro del ejecutable, todo con lazarus. (la idea seria probar los beneficios de correrlo en distintas plataformas)

Confieso que no tengo experiencia pero me lo tome como desafió.

Hasta el momento hice el form con dos edit de usuario y contraseña y coloque el botón de enviar.
Agregue el TFPHTTPClient en la sección use y en el evento FormCreate del tform1 hice una instancia de este objeto.
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
     HTTPClient:=TFPHTTPClient.Create(nil);
     HTTPClient.Post('mipagina.com.ar/data.php', edit1.text);
end;
por lo que estuve mirando debo usar el evento Post de este objeto,lo que no entiendo es como colocar los datos que le quiero enviar a la página.

Espero alguien me pueda dar una ayuda.

Gracias

Sepan disculpar mi fata de conocimientos.

Última edición por Casimiro Notevi fecha: 11-12-2015 a las 19:45:27.
Responder Con Cita
  #2  
Antiguo 11-12-2015
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola,

La verdad no voy a contestar tu interrogante. Mas bien te voy a sembrar mas dudas de las que tienes y de seguro que con investigación y dedicación lograrás sacar el proyecto adelante.

Si quieres usarlo en diferentes plataformas, Puedes buscar información acerca de la construcción y consumo de webservices sea en PHP o en cualquier lenguaje y luego investigar como consumirlos desde lazarus.

Webservices en PHP
Webservices en LAZARUS
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #3  
Antiguo 14-12-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Revisa esta serie de entradas.
Ahí puedes ver cómo generar un Webservice en PHP. En ese caso es para consultar Bases de Datos. El tuyo parece más simple aun que eso, así que debería ser sencillo.
Como segundo paso está cómo realizar aplicaciones en diferentes versiones de Delphi y con diferentes componentes para interactuar con ese Webservice. Algunas de ellas es utilizando las Indy, así que debería ser casi igual al código que tú necesitas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 14-12-2015
ramonigimenez ramonigimenez is offline
Miembro
 
Registrado: ago 2015
Posts: 11
Poder: 0
ramonigimenez Va por buen camino
Hola movorack,

Si realmente me haz generado más dudas, si bien programo en php, el tema de lazarus no conozco.
Voy a investigar.

Gracias!

Cita:
Empezado por movorack Ver Mensaje
Hola,

La verdad no voy a contestar tu interrogante. Mas bien te voy a sembrar mas dudas de las que tienes y de seguro que con investigación y dedicación lograrás sacar el proyecto adelante.

Si quieres usarlo en diferentes plataformas, Puedes buscar información acerca de la construcción y consumo de webservices sea en PHP o en cualquier lenguaje y luego investigar como consumirlos desde lazarus.

Webservices en PHP
Webservices en LAZARUS
Responder Con Cita
  #5  
Antiguo 14-12-2015
Avatar de Osorio
Osorio Osorio is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 251
Poder: 21
Osorio Va por buen camino
Buena guia

Por aqui un gran colaborador del club nos ha dejado una guia que te puede ser de mucha utilidad.

http://neftali.clubdelphi.com/?p=3297


Buen animo y exitos con tu proyecto.
Responder Con Cita
  #6  
Antiguo 14-12-2015
ramonigimenez ramonigimenez is offline
Miembro
 
Registrado: ago 2015
Posts: 11
Poder: 0
ramonigimenez Va por buen camino
Hola Neftali,

Estuve mirando un poco el tema que me paso movorack, y si es una alternativa.
En la app, inicialmente tengo que enviar usuario y clave para validar contra php.
Pero eso no termina ahi, en una segunda etapa haré un formulario para cargar los usuarios desde una app de escritorio y que se guarden por php.
Investigando un poco, me tope con Indy casualmente, pero lo vi en Delphi.
Así que instale delphi 7, que es la versión que conseguí (Sé que también están las nueva XE7, por lo que vi esta tiene herramientas más integradas con la web) esta vienen con Indy 9 y 10, elegi el 10.

Comencé con el programita pero me esta fallando el método POST del objeto IdHTTP1, voy a seguir probando.

Muchas gracias por la ayuda!




Cita:
Empezado por Neftali Ver Mensaje
Revisa esta serie de entradas.
Ahí puedes ver cómo generar un Webservice en PHP. En ese caso es para consultar Bases de Datos. El tuyo parece más simple aun que eso, así que debería ser sencillo.
Como segundo paso está cómo realizar aplicaciones en diferentes versiones de Delphi y con diferentes componentes para interactuar con ese Webservice. Algunas de ellas es utilizando las Indy, así que debería ser casi igual al código que tú necesitas.
Responder Con Cita
  #7  
Antiguo 14-12-2015
ramonigimenez ramonigimenez is offline
Miembro
 
Registrado: ago 2015
Posts: 11
Poder: 0
ramonigimenez Va por buen camino
Gracias Amigo!

Realmente me siento contenido por la buena onda de todos.
Gracias a todos!

Cita:
Empezado por Osorio Ver Mensaje
Por aqui un gran colaborador del club nos ha dejado una guia que te puede ser de mucha utilidad.

neftali.clubdelphi.com/?p=3297

Buen animo y exitos con tu proyecto.
Responder Con Cita
  #8  
Antiguo 15-12-2015
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
En ningún momento ramonigimenez ha dicho que sea el desarrollador de la página en cuestión a la que se conecta. Tampoco ha manifestado que incluso esté a su disposición la posibilidad de un webservice, a pesar de que si ha confirmado que se maneja con PHP.

Hasta el momento ha dicho que visita la página, que casualmente está diseñada en PHP, y que en más adelante su idea es ingresar usuarios hacia la misma. Más no ha aportado palabras concretas que el mismo sea el encargado de llevar dicha página. De ser así puedo entender que la mejor opción que le ofrecen uds sería disponer de un WebService y consumirlo con Indy u otras bibliotecas.
Ahora bien, si resulta ser que por "mipagina.com.ar" es un sitio al que el no tiene control, y no ofrecen un webservice pues ya no queda otra que recurrir a otras opciones. Una de ellas es emplear por ejemplo el TidHTTP de Indy. Y viendo el ejemplo de código, intuyo que es este escenario al que se enfrenta realmente.

La cosa se complica un poquito bastante cuando se trata de Lazarus, al ser multiplataforma y si justamente está en sus planes que la aplicación asi lo sea, habrá que considerar alternativas que lleven a eso. No entiendo porque meten a Delphi cuando el propio título aclara que emplea Lazarus. Lo están mareando al pobre.

ramonigimenez, con el componente TidHTTP de Indy puedes visitar el sitio y pasarle como parámetro justamente los datos del usuario. Tanto Post() como Get() tienen versiones sobrecargadas. Entre ellas está la que buscas. Aunque tampoco es estrictamente necesario que invoques a ese método, puedes simplemente navegar hacia la URL concreta que espera los parámetros. Digamos que sea ProcesaDatos.php el escript encargado de recibir los parámetros y generar la página de resultado (o confirmación, o lo que fuese). La URL en cuestión será algo como elsitio.com.ar/procesadatos.php?param1=dato1&param2=dato2. Utiliza el modo desarrollador de Chrome para hacer "ingeniería inversa" y ver como es que llaman los parámetros, el orden en que van y como están parseados.

Con esto te evitas estar armando un TStrings para pasarle los parámetros a la URL y simplemente armas el URL "completo" y le das Post().

Ahora bien, si la idea es luego de hacer un Post() hacia el sitio, obtener una página a la que consultar a modo de consultar si todo anda bien, lo más directo es en lugar de emplear Post() valerse de Get(). Esto te evita un doble disparo del evento WorkEnd. ¿Porqué? Porque se procede a hacer una lectura/escritura del armado del HTML. Con Get() directamente obtienes todo de una.

Para trabajar con parámetros se resume a algo como esto:
Código Delphi [-]
  param := TStringList.Create;
  param.Add('param1=dato1');
  Param.Add('param2=dato2');
  // ... etc
  Memo1.Text := idHTTP1.Post('Sitio.com.ar/Paginaquerecibelosparams', param);

  FreeAndNil(param);

Y para evitarse armarlos, basta con:

Código Delphi [-]
idHTTP1.Post('Sitio.com.ar/Paginaquerecibelosparams?param1=dato1&param2=dato2&etc');

Ahora bien, si necesitas recuperar la página HTML que te genera Get o Post, tengo una advertencia. ¡Necesitas capturar el código fuente original ANTES de que el componente TidHTTP realice su propio trabajo de encode° No se si es cosa de un bug, o es cosa de diseño pero puedes tener problemas entre el encode original que ha sido escrito y definido en el sitio, y el que aplica los componentes Indy. De modo que por ejemplo en el Memo1 que puse a modo de ejemplo termines con cosas como que un texto como Güemes o Ñoqui que ves en cualquier navegador, en el memo te encuentras con G?emes o ?oqui.

¿Cómo hacer esto? Aprovechando otro de los sobrecargados, debes crear un TStringStream en el que recibirás el código fuente, y luego proceder a aplicar el encode que tiene el sitio hacia el esperado (que por lo general, y por regla, Lazarus espera UTF8). Por ejemplo si la página define como encode ISO-8859-1, tu deberas aplicar ISO_8859_1ToUTF8():

Código Delphi [-]
SRC := TStringStream.Create(''); // Vacio!!
  idHTTP1.Get('Sitio.com.ar/Paginaquerecibelosparams?param1=dato1&param2=dato2&etc', SRC);
  Memo1.Text := ISO_8859_1ToUTF8(SRC.DataString);

Ahora verás en el Memo el HTML original correctamente escrito. Lo que resta ya es cosa de "procesar" el HTML y leer lo que necesites.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #9  
Antiguo 15-12-2015
ramonigimenez ramonigimenez is offline
Miembro
 
Registrado: ago 2015
Posts: 11
Poder: 0
ramonigimenez Va por buen camino
Muchachos,

A todos disculpas si no he sido lo suficientemente claro en la descripción del problema.
Tomando como base lo que han dicho todos, lo resolví casi igual a como lo menciono Delphius.

Les dejo el código,
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  usuario:String;
  contrasena:String;

begin
  usuario:=Edit1.Text;
  contrasena:=Edit2.Text;

  IdHTTP1:= TIdHTTP.Create(nil);
  IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';

  (* Enviar por POST *)
  Parametros := TStringList.Create;
  (*Parametros.Add('var1=RamonArgentina');
  Parametros.Add('var2=SegundoValor');*)
  Parametros.add('var1=' + usuario);
  Parametros.Add('var2=' + contrasena);

  Memo1.Text:=Parametros.Text;

  Memo1.Text:=IdHTTP1.Post('mipagina.com.ar/recibe-post.php',Parametros);
  ////////
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  usuario:String;
  contrasena:String;

begin
  usuario:=Edit1.Text;
  contrasena:=Edit2.Text;

  IdHTTP1:= TIdHTTP.Create(nil);
  IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';

  (* Enviar por GET *)
  Memo1.Text:=IdHTTP1.Get('mipagina.com.ar/recibe-get.php?var1='+usuario+'&var2='+contrasena);
end;

NOTA:
Lo hice en delphi por que en Lazarus se me complico la instalación de indy.

Aprovecho para consultar se puede embeber otro ejecutable en mi programa o no se puede hacer?


GRACIAS A TODOS!!!

Última edición por ecfisa fecha: 15-12-2015 a las 21:10:07. Razón: Etiquetas [delphi][/delphi]
Responder Con Cita
  #10  
Antiguo 15-12-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ramonigimenez.

Muchas gracias por publicar la solución que encontraste.


Por favor, cuando pongas código en tus mensajes usa las etiquetas, de este modo:

(ya las agregué a tu mensaje)

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 15-12-2015
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Desconozco que complejo sea instalar Indy en Lazarus; si usas CodeTyphon la cosa es mucho más sencilla ya que CT lo que hace es intalarte Lazarus con varios componentes, y entre ellos Indy.
Si tienes dificultades para instalarlo acude al propio foro de Indy en su sitio oficial o bien al de Lazarus/FreePascal. En este último la gente es muy buena y acuden en ayuda muy rápido. Las veces que he tenido alguna duda (mi problema con el encode que describo lo he consultado ahí) no he tenido dificultades. Es una comunidad muy activa.

Lo de embeber un ejecutable dentro de otro la verdad es que no sabría indicarte algo; no se si será posible al menos en una solución que sea multiplataforma. En Delphi una vía es valerse de archivos de recursos .res pero no si para Lazarus este mismo enfoque pueda aportar utilidad en un mundo multiplataforma.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #12  
Antiguo 16-12-2015
ramonigimenez ramonigimenez is offline
Miembro
 
Registrado: ago 2015
Posts: 11
Poder: 0
ramonigimenez Va por buen camino
ecfisa,
Gracias por la indicación lo tendré en cuenta para la próxima vez.

Delphius
Desconozco por completo CodeTyphon (Disculpas si hago consultas muy tontas, pero tengo días en el mundo Delphi y freepascal), lo voy a investigar.


Después de haber encontrado la solución en Delphi, decidí seguir en este lenguaje. Sé que es medio tirado de los pelos (poco lógico) lo que quiero hacer, pero necesito resolver esto.

Inicialmente la aplicación debe manejar el control de usuarios contra una DB MySQL (que será parte de un sistema más grande web), cuando el usuario este logeado lanzar otro ejecutable que debe estar embebido en el login anterior, en el que debo completar con un usuario y contraseña genérico (que no puedo modificar), después de esto se habre el programa de gestión.

Les dejo un diagrama para intentar ser más claro en mi twitter (No me deja colocar ni link, ni url)
@ramonigimenez

PD: Para completar el login2 automáticamente probé el lenguaje AutoIT y parece que funciona.


Sé que deben tener mucha dudas de porque debo hacer este programa así. Entonces les comento (Se los debo por la ayuda que me brindaron hasta el momento), debo hacer esto porque no tengo acceso a agregar usuarios para la aplicación principal, y los fuentes del programa están desactualizados y no puedo replicar el entorno de desarrollo que utilizaba el programador, por mi falta de conocimiento y mi poca casi nula experiencia en estos lenguajes. Sé que usaba controles JCL y JVCL, además de otros componente.
Lamentablemente el programador falleció en un accidente y por eso estoy intentando solucionar lo que pueda como para seguir con el sistema. Contacte con varios programadores Dlephi, acá en Buenos Aires, Argentina pero ninguno si animo a seguir.

Si alguno esta dispuesto a darme una mano con la instalación del entorno de manera remota aviseme (por supuesto, también dígame el valor hora para ver si esta dentro de mi presupuesto)

ESPERO NO HABER ESTADO FUERA DE LUGAR!!!
Saludos cordiales a todos y muchas gracias nuevamente!!!

Ramon Gimenez
ramon_gimenez@hotmail.com
Responder Con Cita
  #13  
Antiguo 16-12-2015
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Las preguntas no hechas son tontas. No soy quien para decir si el diseño del software esta bien o mal. Tu ya lo veras en la medida que avances. Aunque si me resulta peculiar...
Respecto a CodeTyphon, se trata de una edicion y distribucion de Lazarus mas completa. Lazarus por defecto viene con unos cuantos componentes. CodeTyphon lo que hace es instalarte Lazarus y cientos de componentes extras, todo con unos pocos clics. Eso si: la gente de CT toma lo ultimo del SVN de lazarus y de los componentes para hacer sus scripts de instalacion asi que no hay garantia de que sean libres de bug.
Hay quienes prefieren tener el control de que instalar en Lazarus y evitan CT. Y otros prefieren la facilidad de CT y asumen el "riesgo".
Yo hasta ahora no tuve problema critico con CT.
Para tu caso en particular no te sabria decir si Lazarus viene con Indy instalado o si esta en la lista de disponibles para instalar o hay que descargarlo. Con CT ya viene.

Saludos
__________________
Delphius
[Guia de estilo][Buscar]
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
Enviar datos a una plantilla MS Word desde Lazarus El_Chava Lazarus, FreePascal, Kylix, etc. 5 06-07-2015 22:56:24
no logro enviar .xml a bd usando el server giulichajari Conexión con bases de datos 6 24-03-2015 18:05:43
Como enviar mensaje usando BB PIN elvymena Internet 0 24-11-2010 18:05:02
Enviar documento usando el fax de Windows epuigdef Varios 5 17-10-2008 08:55:27
enviar un correo usando php skinnerpro PHP 1 19-10-2007 22:33:41


La franja horaria es GMT +2. Ahora son las 21:10:03.


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