Ver Mensaje Individual
  #1  
Antiguo 04-01-2016
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Reputación: 11
bucanero Va camino a la fama
Obtener la información de un fichero sin llegar a descargarlo

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
      //devuelve el tamaño del fichero en el servidor WEB
      FileSize:=Response.ContentLength;
      //devuelve un hash (especie de MD5) del fichero en el servidor WEB
      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
Responder Con Cita