TIdHTTPServer制作REST中間件
使用DELPHI7+INDY9開發
// 陳新光 2017-2-21
// LIS數據同步服務器
// 瀏覽器輸入:http://127.0.0.1:8000/test?t1=china&t2=cxg
unit untMain;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs
 , IdBaseComponent, IdComponent, IdTCPServer, IdCustomHTTPServer, IdHTTPServer
 , IdThreadMgr, IdThreadMgrPool, StdCtrls, IniFiles
 ;
type
 TfrmMain = class(TForm)
 IdHTTPServer1: TIdHTTPServer;
 IdThreadMgrPool1: TIdThreadMgrPool;
 Label1: TLabel;
 procedure FormCreate(Sender: TObject);
 procedure IdHTTPServer1CommandGet(AThread: TIdPeerThread; ARequestInfo: TIdHTTPRequestInfo
 ; AResponseInfo: TIdHTTPResponseInfo);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
var
 frmMain: TfrmMain;
implementation
{$R *.dfm}
uses untDM;
procedure TfrmMain.FormCreate(Sender: TObject);
var
 ini: TIniFile;
begin
 IdHTTPServer1.ThreadMgr := IdThreadMgrPool1;
 //設置綁定參數
 IdHTTPServer1.Active := False;
 IdHTTPServer1.Bindings.Clear;
 ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'config.ini');
 try
 IdHTTPServer1.DefaultPort := ini.ReadInteger('local', 'port', 0);
 finally
 ini.Free;
 end;
 IdHTTPServer1.Bindings.Add.IP := '127.0.0.1';
 //啟動服務器
 IdHTTPServer1.Active := True;
end;
procedure TfrmMain.IdHTTPServer1CommandGet(AThread: TIdPeerThread; ARequestInfo: TIdHTTPRequestInfo;
 AResponseInfo: TIdHTTPResponseInfo);
var
 method, sql: string;
 dm: TfrmDM;
begin
 method := ARequestInfo.Document;
 if method = '/query' then
 begin
 sql := ARequestInfo.Params.Values['sql'];
 AResponseInfo.ResponseNo := 0;
 AResponseInfo.ContentType := 'text/html';
 dm := TfrmDM.Create(nil);
 try
 AResponseInfo.ContentText := dm.Query(sql);
 AResponseInfo.WriteContent;
 finally
 dm.free;
 end;
 end;
end;
end.
