| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- { $HDR$}
- {**********************************************************************}
- { Unit archived using Team Coherence }
- { Team Coherence is Copyright 2002 by Quality Software Components }
- { }
- { For further information / comments, visit our WEB site at }
- { http://www.TeamCoherence.com }
- {**********************************************************************}
- {}
- { $Log: 11259: HTTPClient.pas
- {
- { Rev 1.6 8/2/2003 05:17:20 AM JPMugaas
- { Added HTTP Decompression test cases in a new test in this unit.
- }
- {
- { Rev 1.5 2003.07.11 4:07:42 PM czhower
- { Removed deprecated BXBoxster reference.
- }
- {
- { Rev 1.4 6/24/2003 01:13:50 PM JPMugaas
- { Updates for minor API change.
- }
- {
- Rev 1.3 4/15/2003 2:40:58 PM BGooijen
- Other TempDir
- }
- {
- Rev 1.2 4/14/2003 11:25:46 PM BGooijen
- }
- {
- Rev 1.1 4/4/2003 7:43:44 PM BGooijen
- compile again
- }
- {
- { Rev 1.0 11/12/2002 09:18:36 PM JPMugaas
- { Initial check in. Import from FTP VC.
- }
- unit HTTPClient;
- interface
- uses
- SysUtils, Classes, BXBubble, Forms;
- type
- TdmodHTTPClient = class(TDataModule)
- HTTPClient: TBXBubble;
- HTTPDecompression: TBXBubble;
- procedure HTTPClientTest(Sender: TBXBubble);
- procedure HTTPDecompressionTest(Sender: TBXBubble);
- private
- public
- end;
- var
- dmodHTTPClient: TdmodHTTPClient;
- implementation
- {$R *.dfm}
- { THTTPClient }
- uses
- IdHTTP,
- IdCompressorBorZLib,
- IdCookieManager,
- IdGlobal,IdCoreGlobal,
- BXGlobal,
- // IdSSLOpenSSL,
- IniFiles,
- IdTCPConnection;
- procedure TdmodHTTPClient.HTTPClientTest(Sender: TBXBubble);
- var
- URLFile: TIniFile;
- sMethod,
- sTest,
- sFile : string;
- i,
- iTestCases: Integer;
- strmPostRequest, strmResult : TFileStream;
- begin
- with HTTPClient do begin
- sFile := DataDir + 'HTTPClient.ini';
- if FileExists(sFile) then begin
- URLFile := TIniFile.Create(sFile);
- try
- // Load the number of test cases
- iTestCases := URLFile.ReadInteger('Global', 'TestCases', 0);
- for i := 1 to iTestCases do begin
- // Read the current test case
- sTest := 'Test' + IntToStr(i);
- with TIdHTTP.Create(nil) do try
- // Host := URLFile.ReadString(sTest, 'Host', '');
- // Port := URLFile.ReadInteger(sTest, 'Port', 80);
- if URLFile.ReadString(sTest, 'ProtocolVersion', 'pv1_0') = 'pv1_0' then
- ProtocolVersion := pv1_0
- else
- ProtocolVersion := pv1_1;
- with Request do begin
- Username := URLFile.ReadString(sTest, 'Username', '');
- Password := URLFile.ReadString(sTest, 'Password', '');
- // TODO Add suport for SSL
- ProxyParams.ProxyPort := URLFile.ReadInteger(sTest, 'ProxyPort', 0);
- ProxyParams.ProxyServer := URLFile.ReadString(sTest, 'ProxyServer', '');
- // ProxyAuthenticate is used in the response.
- // ProxyAuthenticate.CommaText := URLFile.ReadString(sTest, 'ProxyAuthenticate', '');
- ProxyParams.ProxyUsername := URLFile.ReadString(sTest, 'ProxyUsername', '');
- ProxyParams.ProxyPassword := URLFile.ReadString(sTest, 'ProxyPassword', '');
- end;
- HandleRedirects := URLFIle.ReadBool(sTest, 'HandleRedirects', False);
- Status('Testing Test' + IntToStr(i) + ': ' + URLFile.ReadString(sTest, 'URL', ''));
- sMethod := URLFile.ReadString(sTest, 'Method', 'GET');
- if AnsiSameText(sMethod, 'GET') then begin
- strmResult := TFileStream.Create(GTempDir + sTest +'.html', fmCreate);
- try
- Get(URLFile.ReadString(sTest, 'URL', ''), strmResult);
- finally
- strmResult.Free;
- end;
- continue;
- end;
- if AnsiSameText(URLFile.ReadString(sTest, 'Cookies', ''), 'YES') then begin
- CookieManager := TIdCookieManager.Create(nil);
- end;
- if AnsiSameText(sMethod, 'HEAD') then begin
- Head(URLFile.ReadString(sTest, 'URL', ''));
- continue;
- end;
- // Post Support
- if AnsiSameText(sMethod, 'POST') then begin
- Request.ContentType := URLFile.ReadString(sTest, 'ContentType', '');
- strmPostRequest := TFileStream.Create(DataDir +
- URLFile.ReadString(sTest, 'PostInfo', ''), fmOpenRead);
- strmResult := TFileStream.Create(GTempDir + sTest + '.html', fmCreate);
- try
- Post(URLFile.ReadString(sTest, 'URL', ''), strmPostRequest, strmResult);
- finally
- strmResult.Free;
- strmPostRequest.Free;
- end;
- continue;
- end;
- finally
- if Assigned(CookieManager) then CookieManager.Free;
- Free;
- end;
- end;
- finally
- URLFile.Free;
- end;
- end;
- end;
- end;
- procedure TdmodHTTPClient.HTTPDecompressionTest(Sender: TBXBubble);
- var LHTTP : TIdHTTP;
- LZ : TIdCompressorBorZLib;
- s : TStream;
- begin
- LHTTP := TIdHTTP.Create(nil);
- LZ := TIdCompressorBorZLib.Create(nil);
- s := TMemoryStream.Create;
- try
- LHTTP.Compressor := LZ;
- //with chunked transfer encoding
- LHTTP.Get('http://www.webcompression.org',s);
- //without chunked transfer encoding
- s.Size := 0;
- LHTTP.Get('http://groups.yahoo.com',s);
- //This is just here as I did see an oddity with groups.yahboo.com.
- //I can not reproduce reliably.
- s.Size := 0;
- LHTTP.Get('http://groups.yahoo.com',s);
- finally
- FreeAndNil(s);
- FreeAndNil(LZ);
- FreeAndNil(LHTTP);
- end;
- end;
- end.
|