httpget.pas 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. program httpget;
  2. {$mode objfpc}{$H+}
  3. uses
  4. {$IFDEF UNIX}{$IFDEF UseCThreads}
  5. cthreads,
  6. {$ENDIF}{$ENDIF}
  7. prothandler,
  8. ftpprothandler,
  9. httpprothandler,
  10. Classes
  11. { add your units here },
  12. IdGlobal, //for some helper functions I like
  13. IdURI,
  14. SysUtils;
  15. procedure PrintHelpScreen;
  16. var LExe : String;
  17. begin
  18. LExe := ExtractFileName(ParamStr(0));
  19. WriteLn(LExe);
  20. WriteLn('');
  21. WriteLn('usage: '+LExe+' [-v] URL');
  22. WriteLn('');
  23. WriteLn(' v : Verbose');
  24. end;
  25. var
  26. GURL : TIdURI;
  27. i : Integer;
  28. LP : TProtHandler;
  29. //program defaults
  30. GVerbose : Boolean;
  31. GHelpScreen : Boolean;
  32. GFTPPort : boolean;
  33. const
  34. GCmdOpts : array [0..5] of string=('-h','--help','-v','--verbose','-P','--port');
  35. begin
  36. GFTPPort := False;
  37. GHelpScreen := False;
  38. GVerbose := False;
  39. LP := nil;
  40. GURL := TIdURI.Create;
  41. try
  42. if ParamCount > 0 then
  43. begin
  44. for i := 1 to ParamCount do
  45. begin
  46. if Copy(ParamStr(i),1,1) = '-' then
  47. begin
  48. WriteLn(ParamStr(i));
  49. case PosInStrArray(ParamStr(i),GCmdOpts) of
  50. 0, 1 : begin
  51. GHelpScreen := True;
  52. break;
  53. end;
  54. 2, 3 : GVerbose := True;
  55. 4, 5 : GFTPPort := True;
  56. end;
  57. end
  58. else
  59. begin
  60. GURL.URI := ParamStr(i);
  61. end;
  62. end;
  63. end
  64. else
  65. begin
  66. GHelpScreen := True;
  67. end;
  68. WriteLn(GURL.URI);
  69. if (GURL.URI = '') or GHelpScreen then
  70. begin
  71. GHelpScreen := True;
  72. end
  73. else
  74. begin
  75. try
  76. if THTTPProtHandler.CanHandleURL(GURL) then
  77. begin
  78. LP := THTTPProtHandler.Create;
  79. LP.Verbose := GVerbose;
  80. LP.GetFile(GURL);
  81. end
  82. else
  83. begin
  84. if TFTPProtHandler.CanHandleURL(GURL) then
  85. begin
  86. LP := TFTPProtHandler.Create;
  87. LP.Verbose := GVerbose;
  88. TFTPProtHandler(LP).Port := GFTPPort;
  89. LP.GetFile(GURL);
  90. end;
  91. end;
  92. finally
  93. FreeAndNil(LP);
  94. end;
  95. end;
  96. finally
  97. FreeAndNil(GURL);
  98. end;
  99. if GHelpScreen then
  100. begin
  101. PrintHelpScreen;
  102. end;
  103. end.