Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Obtener la información de un fichero sin llegar a descargarlo (https://www.clubdelphi.com/foros/showthread.php?t=89643)

bucanero 04-01-2016 19:20:28

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

rruz 05-01-2016 04:48:06

Intenta estableciendo el valor de la propiedad HandleRedirects a True (HandleRedirects:=True;)

bucanero 05-01-2016 09:51:25

Gracias rruz por responder

No lo especifique en el mensaje anterior, pero si esta activa la propiedad HandleRedirects , ya que al hacer el GET sobre la misma URL, se realizan todos los redireccionamientos para descargar el fichero sin problemas.

pongo aqui la configuracion del TIDHTTP

Código Delphi [-]
  with IdHTTP1 do
  begin
    Name := 'IdHTTP1';
    Intercept := IdConnectionIntercept1;
    IOHandler := IdSSLIOHandlerSocketOpenSSL1;
    AllowCookies := True;
    HandleRedirects := True;
    RedirectMaximum := 50;
    HTTPOptions := [hoForceEncodeParams];
    OnRedirect := IdHTTP1Redirect;
    CookieManager := IdCookieManager1;
    Compressor := IdCompressorZLib1;
  end;

y el error que estoy obteniendo cuando intento acceder a esta URL es 405: HTTP/1.1 405 Method Not Allowed


¿hay alguna forma de poder saber la URL de redirección sin llegar a descargar el contenido?


La franja horaria es GMT +2. Ahora son las 06:06:54.

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