Ver Mensaje Individual
  #2  
Antiguo 12-02-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Se me ocurre que para descargar el archivo no necesitas sino seguir el enlace, es decir, no me queda muy claro si sabes cómo descargar un archivo usando Delphi, puesto que el enlace que has puesto redirige a dicho archivo, y, por tanto, no deberías tener problemas en descargarlo.

A lo dicho se suma que el nombre del archivo es del tipo "2983202.divx", así que conocerlo no sé yo si te servirá de mucho o qué. Y, por otro lado, está el hecho de que puedes descargar el archivo y guardarlo con el nombre que tú quieras. Pero, ya digo, no sé si van por aquí los tiros o no.

En todo caso me he entretenido un rato y he preparado una función (no muy buena, seguramente) de modo que puedes obtener las cabeceras HTTP partiendo de una determinada URL, de tal modo que, mejor o peor (no estoy muy contento con el resultado, la verdad) puedes conseguir exactamente los datos que dices, al menos en este caso.

Ahí va la función:

Código Delphi [-]
uses
  WinInet;

function GetHttpHeaders(url: string): string;
var
  agent: string;
  flags: cardinal;
  len, dummy: dword;
  hInet, hUrl: hInternet;
  headers: array [0..MAX_PATH] of char;
begin
  dummy := 0;
  len := sizeof(headers);
  agent := 'Mozilla/3.0 (compatible; )';
  flags := INTERNET_OPEN_TYPE_PRECONFIG;
  hInet := InternetOpen(PChar(agent), flags, nil, nil, 0);
  if (hInet <> nil) then begin
    flags := INTERNET_FLAG_RELOAD;
    hUrl := InternetOpenUrl(hInet, PChar(url), nil, 0, flags, 0);
    if (hUrl <> nil) then begin
      flags := HTTP_QUERY_RAW_HEADERS_CRLF or
               HTTP_QUERY_FLAG_REQUEST_HEADERS;
      if not HttpQueryInfo(hUrl, flags, @headers, len, dummy) then
      begin
        result := EmptyStr
      end else begin
        result := headers;
      end;
      InternetCloseHandle(hUrl);
    end;
    InternetCloseHandle(hInet);
  end else begin
    result := EmptyStr;
  end;
end;

Lo que te retorna es una cadena de caracteres que contiene varios "campos" separados por "retornos de carro". Como podrás comprobar, entre esos campos (que corresponden a cabeceras HTTP) están el "host" y el nombre del archivo en cuestión. Espero que te sea de alguna ayuda.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita