pkgocurl.pp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. {$mode objfpc}
  2. {$h+}
  3. unit pkgoCurl;
  4. interface
  5. uses Classes,pkgdownload;
  6. Type
  7. TOCurlDownloader = Class(TBaseDownloader)
  8. Private
  9. FCurl : String;
  10. Protected
  11. Procedure OCurlDownload(Const URL : String; Dest : TStream); virtual;
  12. Procedure FTPDownload(Const URL : String; Dest : TStream); override;
  13. Procedure HTTPDownload(Const URL : String; Dest : TStream); override;
  14. Public
  15. Property Curl : String Read FCurl Write FCurl;
  16. end;
  17. implementation
  18. uses sysutils,curlobj,pkgmessages;
  19. Procedure TOCurlDownloader.OCurlDownload(Const URL : String; Dest : TStream);
  20. Var
  21. ACurl : TCurl;
  22. FN : String;
  23. F : TFileStream;
  24. begin
  25. FN:=GetTempFileName();
  26. Try
  27. ACurl:=TCurl.Create(Nil);
  28. Try
  29. ACurl.URL:=URL;
  30. ACurl.OutputFile:=FN;
  31. ACurl.NoProgress:=True;
  32. ACurl.Verbose:=False;
  33. ACurl.FollowLocation:=True;
  34. If Not ACurl.Perform then
  35. Error(ACurl.ErrorString);
  36. Finally
  37. ACurl.Free;
  38. end;
  39. F:=TFileStream.Create(FN,fmOpenRead);
  40. Try
  41. Dest.CopyFrom(F,0);
  42. Finally
  43. F.Free;
  44. end;
  45. Finally
  46. If FileExists(FN) then
  47. DeleteFile(FN);
  48. end;
  49. end;
  50. Procedure TOCurlDownloader.FTPDownload(Const URL : String; Dest : TStream);
  51. begin
  52. OCurlDownload(URL,Dest);
  53. end;
  54. Procedure TOCurlDownloader.HTTPDownload(Const URL : String; Dest : TStream);
  55. begin
  56. OCurlDownload(URL,Dest);
  57. end;
  58. end.