Hola,
El tema es que tengo una serie de ficheros que se van descargando de distintos servidores webs y almacenando en nuestro servidor en local, estos ficheros cuando se modifican en la web, debo de actualizarlos también en local. Para determinar cuando se han modificado en el servidor utilizo la siguiente función:
Código Delphi
[-]function TMainForm.GetURLFileInfo(const AURL:String; var FileSize:Int64; var FileHash:String):Boolean;
begin
result:=false;
with TIdURI, IdHTTP1 do
try
try
Head(URLEncode(URLDecode(AURL)));
result:=(ResponseCode=200);
except
on E: EIdHTTPProtocolException do
logs.Error(E, 'GetURLFileInfo('+AURL+')');
end;
finally
if result then begin
FileSize:=Response.ContentLength;
FileHash:=Response.ETAG;
end else begin
FileSize:=0;
FileHash:='';
end;
end;
end;
En teoría (depende de los servidores y de su configuración) devuelve cierta meta-información de los ficheros tal como el tamaño del fichero en bytes y una especie de HASH del contenido del fichero, de tal forma que sin necesidad de descargar el fichero realmente, puedo comprobar si ha sido modificado o no.
El principal problema que estoy teniendo es con el propio componente TIDHTP de las INDY, que al llamar al procedimiento HEAD, este no realiza ningún redirecionamiento para aquellas URLs que lo solicitan. Aunque si la llamada se hace con GET si obtengo los datos correctamente. ¿Se puede hacer redireccionamiento con HEAD?
Por otro lado en un par de servidores de unos aproximadamente siete u ocho con los que trabajo actualmente y solo con algunos ficheros, no en todos, el tamaño de fichero que obtengo no es el correcto, la diferencias son de muy pocos bytes, pero no llega a coincidir. ¿Es realmente este parametro fiable?
Agradezco si alguien puede decirme algo al respecto
Un Saludo