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 05-04-2015
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 218
Poder: 18
Galahad Va por buen camino
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;

Última edición por nlsgarcia fecha: 05-04-2015 a las 19:35:19. Razón: Sintaxis Delphi
Responder Con Cita
  #2  
Antiguo 07-04-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.269
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
Cita:
Empezado por Galahad Ver Mensaje
...
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).
__________________
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
  #3  
Antiguo 11-04-2015
MaxiDucoli MaxiDucoli is offline
Miembro
 
Registrado: feb 2006
Posts: 134
Poder: 19
MaxiDucoli Va por buen camino
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!!
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
Realizar un "Post HTTP" con la clase "TIdHttp" de Indy dec Trucos 6 09-10-2018 18:59:40
Ayuda con incompatibilidad del Post de TIdHTTP de Indy 8 con Indy 10 rolandoj Internet 13 24-12-2008 13:19:01
WebBrowser con Indy idhttp sur-se Internet 2 10-10-2008 11:36:31
Problema con PostData en WebBrowser.Navigate ¡No envia por POST! LuCkY_007 Internet 1 18-01-2006 05:25:23
IBDatase Insert Post Edit Post ariefez Firebird e Interbase 4 12-10-2005 01:53:04


La franja horaria es GMT +2. Ahora son las 14:46:15.


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