TIdHTTPServer制作REST中间件

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.

原文地址:https://www.cnblogs.com/hnxxcxg/p/6553935.html