Проблема с получением прямой ссылки на скачивание fileserve.com с использованием indy - PullRequest
0 голосов
/ 29 июня 2011

У меня проблема при попытке получить прямую ссылку для скачивания с помощью indy (delphi 2007)

Я успешно захожу на (fileserve.com) с премиум-аккаунтом, используя этот код

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
Data, Page : TStringList;
begin
Data := TStringList.Create;
idhttp1.OnRedirect := IdHTTP1Redirect;

idhttp1.AllowCookies := True;
idhttp1.HandleRedirects := True;
idhttp1.ProtocolVersion := pv1_1;
idhttp1.CookieManager := IdCookieManager1;
idhttp1.RedirectMaximum := 15;
idhttp1.Request.UserAgent := 'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.1)';

Data.Add('loginUserName=[user]&loginUserPassword=[pass]&autoLogin=&loginFormSubmit=Login');
IdHTTP1.Post('http://www.fileserve.com/login.php',Data);

idHTTP1.get('http://www.fileserve.com/file/aYkRqp3');

for i := 0 to IdCookieManager1.CookieCollection.Count - 1 do
 form1.Memo2.Lines.Add(IdCookieManager1.CookieCollection.Items[i].CookieText);

end;
procedure TForm1.IdHTTP1Redirect(Sender: TObject; var dest: string;
  var NumRedirect: Integer; var Handled: Boolean; var VMethod: string);
begin
form1.Edit1.Text := dest; //this will show the direct link after "idHTTP1.get" download the hole file
end;

Я хочу получить прямую ссылку для скачивания по этой ссылке, например fileserve.com/file/aYkRqp3 но приведенный выше код скачает файл и покажет прямую ссылку, я не хочу, чтобы я хотел получить прямую ссылку без загрузки файла ... Переадресация fileserve с http://www.fileserve.com/file/aYkRqp3 на прямую ссылку http://fs559dm.fileserve.com/file/aYkRqp3/MAfrTjoMNgfT44D9-2-OTNML/22c855/hex-editor-neo.exe Я хочу прямую ссылку только, как я могу это сделать, пожалуйста, извините за мой английский

1 Ответ

1 голос
/ 01 июля 2011

Чтобы избежать загрузки при перенаправлении, вы можете установить TIdHTTP.HandleRedirects в False и Handled в True в событии TIdHTTP.OnRedirect.Перенаправленный URL будет в свойстве TIdHTTP.Response.Location при выходе из TIdHTTP.Get().Например:

procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
  Data, Page : TStringList;
begin
  IdHTTP1.OnRedirect := nil;
  IdHTTP1.AllowCookies := True;
  IdHTTP1.HandleRedirects := True;
  IdHTTP1.ProtocolVersion := pv1_1;
  IdHTTP1.CookieManager := IdCookieManager1;
  IdHTTP1.RedirectMaximum := 15;
  IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.1)';

  Data := TStringList.Create;
  try
    Data.Add('loginUserName=[user]');
    Data.Add('loginUserPassword=[pass]');
    Data.Add('autoLogin=');
    Data.Add('loginFormSubmit=Login');
    IdHTTP1.Post('http://www.fileserve.com/login.php', Data);
  finally
    Data.Free;
  end;

  IdHTTP1.HandleRedirects := False;
  IdHTTP1.OnRedirect := IdHTTP1Redirect;
  IdHTTP1.Get('http://www.fileserve.com/file/aYkRqp3');

  Edit1.Text := idHTTP1.Response.Location;
  for i := 0 to IdCookieManager1.CookieCollection.Count - 1 do
    Memo2.Lines.Add(IdCookieManager1.CookieCollection.Items[i].CookieText);
end;

procedure TForm1.IdHTTP1Redirect(Sender: TObject; var dest: string; var NumRedirect: Integer; var Handled: Boolean; var VMethod: string);
begin
  Handled := True;
end; 
...