123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- program cmdclient;
- {$mode objfpc}{$H+}
- uses
- cwstring,Classes, SysUtils, CustApp, fphttpclient, db, bufdataset, XMLDatapacketReader;
- type
- { TSQLDBRestClientApplication }
- TSQLDBRestClientApplication = class(TCustomApplication)
- Private
- FURL: String;
- FUserName: string;
- FPassword: string;
- FShowRaw : Boolean;
- protected
- procedure RunQuery(aDataset: TBufDataset);
- Procedure ShowData(aDataset: TDataset);
- procedure DoRun; override;
- public
- constructor Create(TheOwner: TComponent); override;
- destructor Destroy; override;
- procedure WriteHelp; virtual;
- end;
- { TSQLDBRestClientApplication }
- procedure TSQLDBRestClientApplication.RunQuery(aDataset : TBufDataset);
- Var
- C : TFPHTTPClient;
- S : TStringStream;
- U : String;
- begin
- U:=FURL;
- S:=Nil;
- C:=TFPHTTPClient.Create(Self);
- try
- C.UserName:=FUserName;
- C.Password:=FPassword;
- S:=TStringStream.Create;
- if Pos('?',U)=0 then
- U:=U+'?'
- else
- U:=U+'&';
- U:=U+'fmt=buf';
- C.Get(U,S);
- if FShowRaw then
- begin
- Writeln('Raw request data:');
- Writeln('---');
- Writeln(S.Datastring);
- Writeln('---');
- end;
- S.Position:=0;
- aDataset.LoadFromStream(S,dfXML);
- finally
- S.Free;
- C.Free;
- end;
- end;
- procedure TSQLDBRestClientApplication.ShowData(aDataset: TDataset);
- Var
- I : Integer;
- F : TField;
- FL : Integer;
- begin
- FL:=0;
- With aDataset do
- begin
- For I:=0 to FieldDefs.Count-1 do
- if Length(FieldDefs[I].Name)>FL then
- FL:=Length(FieldDefs[I].Name);
- While not EOF do
- begin
- Writeln(StringOfChar('-',FL));
- Writeln('Record: ',RecNo:4);
- Writeln(StringOfChar('-',FL));
- For F in Fields do
- With F do
- begin
- Write(FieldName:FL,': ');
- if F.IsNull then
- Writeln('<NULL>')
- else
- Writeln(F.AsString);
- end;
- Next;
- end;
- end;
- end;
- procedure TSQLDBRestClientApplication.DoRun;
- var
- ErrorMsg: String;
- D : TBufDataset;
- begin
- // quick check parameters
- ErrorMsg:=CheckOptions('hU:u:p:r', ['help','url:','username:','password:','raw']);
- if ErrorMsg<>'' then begin
- ShowException(Exception.Create(ErrorMsg));
- Terminate;
- Exit;
- end;
- // parse parameters
- if HasOption('h', 'help') then begin
- WriteHelp;
- Terminate;
- Exit;
- end;
- FURL:=GetOptionValue('U','url');
- FUserName:=GetOptionValue('u','username');
- FPassword:=GetOptionValue('p','password');
- FShowRaw:=HasOption('r','raw');
- D:=TBufDataset.Create(Self);
- try
- RunQuery(D);
- ShowData(D);
- Finally
- D.Free;
- end;
- // stop program loop
- Terminate;
- end;
- constructor TSQLDBRestClientApplication.Create(TheOwner: TComponent);
- begin
- inherited Create(TheOwner);
- StopOnException:=True;
- end;
- destructor TSQLDBRestClientApplication.Destroy;
- begin
- inherited Destroy;
- end;
- procedure TSQLDBRestClientApplication.WriteHelp;
- begin
- { add your help code here }
- writeln('Usage: ', ExeName, ' [options]');
- Writeln('Where options is one or more of:');
- Writeln('-h --help this message');
- Writeln('-p --password=PWD HTTP Basic authentication password.');
- Writeln('-r --raw Show raw request data');
- Writeln('-U --url=URL URL to get data from. Do not add format (fmt) parameter');
- Writeln('-u --username=User HTTP Basic authentication username');
- end;
- var
- Application: TSQLDBRestClientApplication;
- begin
- Application:=TSQLDBRestClientApplication.Create(nil);
- Application.Title:='SQLDB Rest Bridge client application';
- Application.Run;
- Application.Free;
- end.
|