httpget.pas 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. program httpget;
  2. {$mode objfpc}{$H+}
  3. uses
  4. SysUtils, Classes, fphttpclient, sslsockets, fpopenssl, opensslsockets;
  5. Type
  6. { TTestApp }
  7. TTestApp = Class(Tobject)
  8. procedure DoProgress(Sender: TObject; Const ContentLength, CurrentPos : Int64);
  9. procedure DoHeaders(Sender : TObject);
  10. procedure DoPassword(Sender: TObject; var RepeatRequest: Boolean);
  11. procedure ShowRedirect(ASender : TObject; Const ASrc : String; Var ADest : String);
  12. Procedure Run;
  13. end;
  14. procedure TTestApp.DoHeaders(Sender : TObject);
  15. Var
  16. I : Integer;
  17. begin
  18. Writeln('Response headers received:');
  19. With (Sender as TFPHTTPClient) do
  20. For I:=0 to ResponseHeaders.Count-1 do
  21. Writeln(ResponseHeaders[i]);
  22. end;
  23. procedure TTestApp.DoProgress(Sender: TObject; const ContentLength, CurrentPos: Int64);
  24. begin
  25. If (ContentLength=0) then
  26. Writeln('Reading headers : ',CurrentPos,' Bytes.')
  27. else If (ContentLength=-1) then
  28. Writeln('Reading data (no length available) : ',CurrentPos,' Bytes.')
  29. else
  30. Writeln('Reading data : ',CurrentPos,' Bytes of ',ContentLength);
  31. end;
  32. procedure TTestApp.DoPassword(Sender: TObject; var RepeatRequest: Boolean);
  33. Var
  34. H,UN,PW : String;
  35. P : Integer;
  36. begin
  37. With TFPHTTPClient(Sender) do
  38. begin
  39. H:=GetHeader(ResponseHeaders,'WWW-Authenticate');
  40. end;
  41. P:=Pos('realm',LowerCase(H));
  42. if (P>0) then
  43. begin
  44. P:=Pos('"',H);
  45. Delete(H,1,P);
  46. P:=Pos('"',H);
  47. H:=Copy(H,1,Pos('"',H)-1);
  48. end;
  49. Writeln('Authorization required. Remote site says: ',H);
  50. Write('Enter username (empty quits): ');
  51. ReadLn(UN);
  52. RepeatRequest:=(UN<>'');
  53. if RepeatRequest then
  54. begin
  55. Write('Enter password: ');
  56. Readln(PW);
  57. TFPHTTPClient(Sender).UserName:=UN;
  58. TFPHTTPClient(Sender).Password:=PW;
  59. end;
  60. end;
  61. procedure TTestApp.ShowRedirect(ASender: TObject; const ASrc: String;
  62. var ADest: String);
  63. begin
  64. Writeln('Following redirect from ',ASrc,' ==> ',ADest);
  65. end;
  66. procedure TTestApp.Run;
  67. begin
  68. if (ParamCount<>2) then
  69. begin
  70. writeln('Usage : ',ExtractFileName(ParamStr(0)), 'URL filename');
  71. Halt(1);
  72. end;
  73. With TFPHTTPClient.Create(Nil) do
  74. try
  75. AllowRedirect:=True;
  76. OnRedirect:=@ShowRedirect;
  77. OnPassword:=@DoPassword;
  78. OnDataReceived:=@DoProgress;
  79. OnHeaders:=@DoHeaders;
  80. { Set this if you want to try a proxy.
  81. Proxy.Host:='195.207.46.20';
  82. Proxy.Port:=8080;
  83. }
  84. Get(ParamStr(1),ParamStr(2));
  85. finally
  86. Free;
  87. end;
  88. end;
  89. begin
  90. With TTestApp.Create do
  91. try
  92. Run;
  93. finally
  94. Free;
  95. end;
  96. end.