delphi 12 idhttpsever(S)+idhttp(C) 实现简单的JSON API服务

这篇博客展示了如何使用Delphi创建一个简单的HTTP服务器,并处理GET和POST请求。服务器监听6600端口,响应JSON格式的数据。客户端通过IdHttp组件进行GET和POST请求,获取并显示服务器响应的内容。

http服务器测试代码

procedure TForm1.FormShow(Sender: TObject);

begin

IdHTTPServer1.Bindings.Clear;

IdHTTPServer1.DefaultPort:= 6600;

IdHTTPServer1.Bindings.Add.IP := '127.0.0.1';

//启动服务器

IdHTTPServer1.Active := True;

end;

procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;

ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);

var

I: Integer;

begin

if SameText(ARequestInfo.Command, 'get') then

begin

if ARequestInfo.Document = '/api_v1/get_token' then

begin

Memo1.Lines.Add('-------------');

Memo1.Lines.Add(ARequestInfo.Params.Count.ToString);

Memo1.Lines.Add('-------------');

for I := 0 to ARequestInfo.Params.Count - 1 do

begin

Memo1.Lines.Add(ARequestInfo.Params.ValueFromIndex[I]);

end;

Memo1.Lines.Add('-------------');

AResponseInfo.CharSet := 'UTF-8';

AResponseInfo.ContentType := 'application/json';

AResponseInfo.ContentText := '{a:"001", b:"002", c:[ a:"003", b:"004"]}';

end;

end;

if SameText(ARequestInfo.Command, 'post') then

begin

if ARequestInfo.Document = '/api_v2/get_token' then

begin

Memo1.Lines.Add('-------------');

Memo1.Lines.Add(ARequestInfo.Params.Count.ToString);

Memo1.Lines.Add('-------------');

for I := 0 to ARequestInfo.Params.Count - 1 do

begin

Memo1.Lines.Add(ARequestInfo.Params.ValueFromIndex[I]);

end;

Memo1.Lines.Add('-------------');

AResponseInfo.CharSet := 'UTF-8';

AResponseInfo.ContentType := 'application/json';

AResponseInfo.ContentText := '{a:"0011", b:"0022", c:[ a:"0033", b:"0044"]}';

end;

end;

end;

客户端DEMO

客户端DEMO

procedure TForm2.Button1Click(Sender: TObject);

var

ttt: String;

begin

ttt := IdHttp1.Get('http://127.0.0.1:6600/api_v1/get_token?a=1\&b=2');

memo1.Text := ttt;

end;

procedure TForm2.Button2Click(Sender: TObject);

var

Sendmessage:TStringList;//发送内容

Receivemessage:TStringStream;//返回内容

ttt: String;

begin

Sendmessage:=TStringList.Create;

Receivemessage:=TStringStream.Create('');

Sendmessage.Add('ID=1001');//必须要有Add('字段=值')这种模式,否则传递过去服务端接收的是空值

Sendmessage.Add('name=jack');//还可以用Param.Add(head+middle+Edit1.text)的方式连接成有效的数组

Sendmessage.Add('sex=male');

IdHTTP1.ReadTimeout:=10000;//设置十秒后超时

IdHttp1.Post('http://127.0.0.1:6600/api_v2/get_token',Sendmessage, Receivemessage);

memo1.Text:=Receivemessage.DataString;//显示返回的值

Sendmessage.Free;

Receivemessage.Free;

end;

相关推荐
愤怒的山羊5 分钟前
jetcache List 缓存, json 序列化 泛型解析成了 JsonObject 处理
缓存·json·list
周杰伦fans10 分钟前
C# 中的**享元工厂**模式
开发语言·数据库·c#
历程里程碑12 分钟前
各种排序法大全
c语言·数据结构·笔记·算法·排序算法
u***u68516 分钟前
C++在系统中的异常处理
java·开发语言·c++
树在风中摇曳17 分钟前
带哨兵位的双向循环链表详解(含 C 代码)+ LeetCode138 深度解析 + 顺序表 vs 链表缓存机制对比(图解 CPU 层级)
c语言·链表·缓存
爱学测试的雨果24 分钟前
收藏!软件测试面试题
开发语言·面试·职场和发展
安然无虞1 小时前
JMeter性能测试工具·下
开发语言·测试工具·jmeter
4***R2401 小时前
C++在音视频处理中的库
开发语言·c++·音视频
雨落在了我的手上1 小时前
C语言入门(二十一):字符函数和字符串函数(1)
c语言
embrace991 小时前
【C语言学习】结构体详解
android·c语言·开发语言·数据结构·学习·算法·青少年编程