ChainedHTTPClient.pas 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. { $HDR$}
  2. {**********************************************************************}
  3. { Unit archived using Team Coherence }
  4. { Team Coherence is Copyright 2002 by Quality Software Components }
  5. { }
  6. { For further information / comments, visit our WEB site at }
  7. { http://www.TeamCoherence.com }
  8. {**********************************************************************}
  9. {}
  10. { $Log: 18273: ChainedHTTPClient.pas }
  11. {
  12. { Rev 1.6 2003.07.28 11:21:40 AM czhower
  13. { Updates
  14. }
  15. {
  16. { Rev 1.5 2003.07.16 3:34:50 PM czhower
  17. { Removed IdChainEngineStack
  18. }
  19. {
  20. { Rev 1.4 2003.07.11 4:07:40 PM czhower
  21. { Removed deprecated BXBoxster reference.
  22. }
  23. {
  24. { Rev 1.3 6/24/2003 01:15:06 PM JPMugaas
  25. { Updated for API change.
  26. }
  27. {
  28. Rev 1.2 5/11/2003 2:16:28 PM BGooijen
  29. Added IOCP tests
  30. }
  31. {
  32. Rev 1.1 4/15/2003 2:40:58 PM BGooijen
  33. Other TempDir
  34. }
  35. {
  36. Rev 1.0 4/14/2003 11:14:18 PM BGooijen
  37. }
  38. unit ChainedHTTPClient;
  39. interface
  40. uses
  41. SysUtils, Classes, BXBubble, Forms;
  42. type
  43. TdmodChainedHTTPClient = class(TDataModule)
  44. ChainedHTTPClientIOCP: TBXBubble;
  45. procedure ChainedHTTPClientIOCPTest(Sender: TBXBubble);
  46. private
  47. public
  48. end;
  49. var
  50. dmodChainedHTTPClient: TdmodChainedHTTPClient;
  51. implementation
  52. {$R *.dfm}
  53. uses
  54. IdHTTP, IdFiber, IdIOHandlerChain, IdFiberWeaverDefault,
  55. BXGlobal,
  56. IdCookieManager,
  57. IdGlobal,
  58. // IdSSLOpenSSL,
  59. IniFiles,
  60. IdTCPConnection;
  61. Type
  62. THTTPFiber = class(TIdFiber)
  63. protected
  64. FChainEngine: TIdChainEngine;
  65. FTest: TBXBubble;
  66. FFiberWeaver: TIdFiberWeaver;
  67. FHost: string;
  68. procedure Execute; override;
  69. end;
  70. procedure THTTPFiber.Execute;
  71. var
  72. LIOHandler: TIdIOHandlerChain;
  73. URLFile: TIniFile;
  74. sMethod,
  75. sTest,
  76. sFile : string;
  77. i,
  78. iTestCases: Integer;
  79. strmPostRequest, strmResult : TFileStream;
  80. begin
  81. sFile := FTest.DataDir + 'ChainedHTTPClient.ini';
  82. if FileExists(sFile) then begin
  83. URLFile := TIniFile.Create(sFile);
  84. try
  85. // Load the number of test cases
  86. iTestCases := URLFile.ReadInteger('Global', 'TestCases', 0);
  87. for i := 1 to iTestCases do begin
  88. // Read the current test case
  89. sTest := 'Test' + IntToStr(i);
  90. LIOHandler := TIdIOHandlerChain.Create(nil, FChainEngine, FFiberWeaver, Self);try
  91. with TIdHTTP.Create(nil) do try
  92. IOHandler := LIOHandler;
  93. // Host := URLFile.ReadString(sTest, 'Host', '');
  94. // Port := URLFile.ReadInteger(sTest, 'Port', 80);
  95. if URLFile.ReadString(sTest, 'ProtocolVersion', 'pv1_0') = 'pv1_0' then
  96. ProtocolVersion := pv1_0
  97. else
  98. ProtocolVersion := pv1_1;
  99. with Request do begin
  100. Username := URLFile.ReadString(sTest, 'Username', '');
  101. Password := URLFile.ReadString(sTest, 'Password', '');
  102. // TODO Add suport for SSL
  103. ProxyParams.ProxyPort := URLFile.ReadInteger(sTest, 'ProxyPort', 0);
  104. ProxyParams.ProxyServer := URLFile.ReadString(sTest, 'ProxyServer', '');
  105. // ProxyAuthenticate is used in the response.
  106. // ProxyAuthenticate.CommaText := URLFile.ReadString(sTest, 'ProxyAuthenticate', '');
  107. ProxyParams.ProxyUsername := URLFile.ReadString(sTest, 'ProxyUsername', '');
  108. ProxyParams.ProxyPassword := URLFile.ReadString(sTest, 'ProxyPassword', '');
  109. end;
  110. HandleRedirects := URLFIle.ReadBool(sTest, 'HandleRedirects', False);
  111. FTest.Status('Testing Test' + IntToStr(i) + ': ' + URLFile.ReadString(sTest, 'URL', ''));
  112. sMethod := URLFile.ReadString(sTest, 'Method', 'GET');
  113. if AnsiSameText(sMethod, 'GET') then begin
  114. strmResult := TFileStream.Create(GTempDir + sTest +'.html', fmCreate);
  115. try
  116. Get(URLFile.ReadString(sTest, 'URL', ''), strmResult);
  117. finally
  118. strmResult.Free;
  119. end;
  120. continue;
  121. end;
  122. if AnsiSameText(URLFile.ReadString(sTest, 'Cookies', ''), 'YES') then begin
  123. CookieManager := TIdCookieManager.Create(nil);
  124. end;
  125. if AnsiSameText(sMethod, 'HEAD') then begin
  126. Head(URLFile.ReadString(sTest, 'URL', ''));
  127. continue;
  128. end;
  129. // Post Support
  130. if AnsiSameText(sMethod, 'POST') then begin
  131. Request.ContentType := URLFile.ReadString(sTest, 'ContentType', '');
  132. strmPostRequest := TFileStream.Create(FTest.DataDir +
  133. URLFile.ReadString(sTest, 'PostInfo', ''), fmOpenRead);
  134. strmResult := TFileStream.Create(GTempDir + sTest + '.html', fmCreate);
  135. try
  136. Post(URLFile.ReadString(sTest, 'URL', ''), strmPostRequest, strmResult);
  137. finally
  138. strmResult.Free;
  139. strmPostRequest.Free;
  140. end;
  141. continue;
  142. end;
  143. finally
  144. if Assigned(CookieManager) then CookieManager.Free;
  145. Free;
  146. end;
  147. finally
  148. FreeAndNil(LIOHandler);
  149. end;
  150. end;
  151. finally
  152. URLFile.Free;
  153. end;
  154. end;
  155. end;
  156. procedure TdmodChainedHTTPClient.ChainedHTTPClientIOCPTest( Sender: TBXBubble);
  157. var
  158. LChainEngine: TIdChainEngine;
  159. LFiberWeaver: TIdFiberWeaverDefault;
  160. LFiber: THTTPFiber;
  161. LSelfFiber: TIdConvertedFiber;
  162. begin
  163. with ChainedHTTPClientIOCP do begin
  164. LChainEngine := TIdChainEngine.Create(nil); try
  165. LSelfFiber := TIdConvertedFiber.Create; try
  166. LFiberWeaver := TIdFiberWeaverDefault.Create(nil); try
  167. LFiber := THTTPFiber.Create(LSelfFiber, LFiberWeaver);
  168. with LFiber do begin
  169. FChainEngine := LChainEngine;
  170. FFiberWeaver := LFiberWeaver;
  171. FTest := ChainedHTTPClientIOCP;
  172. end;
  173. LFiberWeaver.ProcessInThisFiber(LSelfFiber);
  174. LFiber.Free;
  175. finally FreeAndNil(LFiberWeaver); end;
  176. finally FreeAndNil(LSelfFiber); end;
  177. finally FreeAndNil(LChainEngine); end;
  178. end;
  179. end;
  180. end.