restemplate/restemplate.lpr

128 lines
2.8 KiB
Plaintext

{
This file is part of restemplate.
Copyright (C) 2015 Andreas Schneider
restemplate is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
sqlvision is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with restemplate. If not, see <http://www.gnu.org/licenses/>.
}
program restemplate;
uses
SysUtils, Classes, strutils, JTemplate, httpsend;
var
data: TextFile;
line: String;
parser: TJTemplateParser;
http: THTTPSend;
method: String;
content: TStringList;
commandMode: Boolean;
procedure CmdAskUser(AName: String);
var
value: String;
begin
Write(AName, ': ');
ReadLn(value);
parser.Fields.Add(AName, value);
end;
procedure CmdHeader(AHeader: String);
begin
parser.Content := AHeader;
parser.Replace;
http.Headers.Add(parser.Content);
end;
procedure CmdCall(AURL: String);
var
s: String;
begin
parser.Content := AURL;
parser.Replace;
writeln('Calling ', parser.Content);
if content.Count > 0 then
content.SaveToStream(http.Document);
if http.HTTPMethod(method, parser.Content) then
begin
writeln;
writeln('Status: ', http.ResultCode);
writeln;
writeln('Headers:');
for s in http.Headers do
writeln(' ', s);
writeln;
content.LoadFromStream(http.Document);
writeln(content.Text);
end else
writeln('FAILED !!!');
end;
function ProcessCommand(ALine: String): Boolean;
begin
Result := False;
if AnsiStartsStr('Ask ', ALine) then
begin
Result := True;
CmdAskUser(Copy(ALine, 5, Length(ALine)));
end else
if AnsiStartsStr('Header ', ALine) then
begin
Result := True;
CmdHeader(Copy(ALine, 8, Length(ALine)));
end else
if AnsiStartsStr('Method ', ALine) then
begin
Result := True;
method := Copy(ALine, 8, Length(ALine));
end else
if AnsiStartsStr('Call ', ALine) then
begin
Result := True;
CmdCall(Copy(ALine, 6, Length(ALine)));
end;
end;
begin
AssignFile(data, ParamStr(1));
Reset(data);
parser := TJTemplateParser.Create;
http := THTTPSend.Create;
content := TStringList.Create;
commandMode := True;
while not EOF(data) do
begin
ReadLn(data, line);
if commandMode and (line <> '') and not ProcessCommand(line) then
commandMode := False;
if not commandMode then
content.Add(line);
end;
parser.Free;
http.Free;
content.Free;
CloseFile(data);
end.