Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   llamada post con indy ,enlace con webbrowser (https://www.clubdelphi.com/foros/showthread.php?t=88024)

Galahad 05-04-2015 18:46:49

llamada post con indy ,enlace con webbrowser
 
Hola, buenas tardes...

Estoy haciendo una peticion 'post' con los componentes indy a una página web de la agencia tributaria.
Dicha página devuelve, en caso de que sea correcta la llamada con todos los parámetros una página web con un archivo pdf
con una serie de datos fiscales, en caso de que sea incorrecta o el servicio no esté disponible devuelve una página html indicando el error.
La llamada funciona perfectamente, devuelve un memorystream al cual accedo con un webbrowser y me encuentro con el archivo pdf o la página html,
el problema es que necesitaria 'saber' antes de hacer el wb.navigate,, si el documento que voy a visualizar es de un tipo o de otro.
He estado mirando de 'parsear' el documento del webbrowser,, pero no he encontrado como hacerlo.
Este es el código, a ver si a alguien se le ocurre algo.
Un saludo y gracias anticipadas.
Código Delphi [-]
var fS: TFileStream;
     fName,ext: String;
     aStream: TMemoryStream;
     LHandler: TIdSSLIOHandlerSocketOpenSSL;
     Params :TStringStream;
     IdHTTP1 : TIdHTTP;
  begin 
     aStream := TMemoryStream.create;
     Params := TStringStream.create('');
     IdHTTP1:=TIdHTTP.Create(nil);
     LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
     IdHTTP1.IOHandler:=LHandler;
    with IdHTTP1 do
    begin
      Request.ContentType := 'application/x-www-form-urlencoded';
      try
         Post( ruta, Params, aStream);
         // pasamos el memorystream a un filestream
         fS := TFileStream.Create(fName,fmCreate);
         try
             astream.SaveToStream(fS);
         finally
             fS.Free;
         end;
         if fileExists(fname)then      
         begin
                 wb := TWebBrowser.Create( Panel2  );
                 TWinControl(wb).Parent := Panel2;
                 TWinControl(wb).Name := 'ValidAEAT';
                 wb.Align := alClient;
                 wb.Navigate( fname );  // aqui obtengo o el pdf dentro de la página o la pagina html indicando el error. 
                 
                 while wb.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages;
         end;
      except
         on E: Exception do
               showmessage('Se encontró un error al Validar/Procesar el fichero.');
      end;

    end;

Neftali [Germán.Estévez] 07-04-2015 11:13:46

Cita:

Empezado por Galahad (Mensaje 490819)
...
el problema es que necesitaria 'saber' antes de hacer el wb.navigate,, si el documento que voy a visualizar es de un tipo o de otro.
He estado mirando de 'parsear' el documento del webbrowser,, pero no he encontrado como hacerlo.

Revisa la cabecera del fichero (stream).
Se que los PDF's tienen una cabecera estandard (según la versión hay varias, pero siempre es la misma).

MaxiDucoli 11-04-2015 10:13:54

Hola, solo tenés que revisar que el Stream tenga esta cadena en su cabecera para saber si es PDF.

%PDF- o 0025-0050-0044-0046-002D

Espero te sirva. Saludos!!


La franja horaria es GMT +2. Ahora son las 23:53:19.

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