Galahad
05-04-2015, 18:46:49
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.
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;
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.
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;