Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Descargar un fichero (https://www.clubdelphi.com/foros/showthread.php?t=53152)

sagitarius 12-02-2008 13:58:02

Descargar un fichero
 
Buenas.

Les cuento, tengo varios enlaces del tipo

http://www.peliculasyonkis.com/descargar.php?id=934

y rapidamente se lanza una ventana para descargar el fichero, quisiera saber si es posible interactuar con esa ventana desde delphi (para obtener el nombre del fichero y el servidor).

Es decir al presionar sobre el enlace aparace la tipica ventana para descargar el fichero y deseo obtener el nombre y servidor del fichero para poderlo descargar desde mi aplicacion delphi.

Gracias

dec 12-02-2008 15:06:13

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.

sagitarius 13-02-2008 03:35:33

Gracias dec.

Googleando he localizado otro codigo mediante componentes indy mas concretamente con el componente TIdHttp.


Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
begin
  IdHTTP1.HandleRedirects:=true;
  IdHTTP1.Head(ComBobox1.Items.Strings[Combobox1.itemIndex]);
  ListBox1.Items.Assign(idhttp1.Response.RawHeaders);
  if IdHTTP1.ResponseCode=404 then
    ListBox1.Items.Add('A File nem letezik')
    else
    begin
     if IdHTTP1.ResponseCode=200 then
     ListBox1.Items.Add('A File letezik')
      else
      ListBox1.Items.Add('Hiba');
      ListBox1.Items.Add('*************************************');
      ListBox1.Items.Add('Visszateresi kod szoveges :'+IdHTTP1.ResponseText);
      ListBox1.Items.Add('Visszateresi kod ertek :'+inttostr(IdHTTP1.Responsecode));
      ListBox1.Items.Add('host:'+IdHTTP1.Request.Host+'   Filenev :'+IdHTTP1.Request.URL);
       if idhttp1.Response.RawHeaders.IndexOfName('Last-Modified') > -1 then
      ListBox1.Items.Add('Utolso modositas datum :'+idhttp1.Response.RawHeaders.Values['Last-Modified'])
       else
      ListBox1.Items.Add('Nincs info az utolso modositasrol');
       if idhttp1.Response.RawHeaders.IndexOfName('Date') > -1 then
      ListBox1.Items.Add('File datum :'+idhttp1.Response.RawHeaders.Values['Date'])
      else
       ListBox1.Items.Add('Nincs info a file datumarol');
        if idhttp1.Response.RawHeaders.IndexOfName('Content-length') > -1 then
      ListBox1.Items.Add('File meret byte :'+idhttp1.Response.RawHeaders.Values['Content-length'])
      else
       ListBox1.Items.Add('Nincs info a file mereterol');
   end;
end;


La franja horaria es GMT +2. Ahora son las 10:47:51.

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