当前位置: 首页 > news >正文

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;

http://www.lryc.cn/news/496928.html

相关文章:

  • JVM 主副内存 详解
  • sscanf与sprintf函数
  • 【k8s】创建基于sa的token的kubeconfig
  • Gentoo Linux部署LNMP
  • 2411C++,CXImage简单使用
  • 什么是 Kubernetes(K8s)?
  • 深入解析:TypeScript 与 Vue 的完美结合
  • 机器学习周志华学习笔记-第13章<半监督学习>
  • 软件工程——期末复习(1)
  • 【JavaEE初阶 — 网络编程】实现基于TCP协议的Echo服务
  • vue结合canvas动态生成水印效果
  • Qt 5 中的 QTextStream 使用指南
  • 中安证件OCR识别技术助力鸿蒙生态:智能化证件识别新体验
  • SpringBoot 框架下基于 MVC 的高校办公室行政事务管理系统:设计开发全解析
  • 【ArkTS】使用AVRecorder录制音频 --内附录音机开发详细代码
  • Selenium3+Python如何操作键盘
  • PLC协议
  • C_字符串的一些函数
  • 使用Native AOT发布C# dll 提供给C++调用
  • Git 提交代码日志信息
  • Request method ‘POST‘ not supported(500)
  • 终端环境下关闭显示器
  • 常见排序算法总结 (三) - 归并排序与归并分治
  • 【后端开发】Go语言编程实践,Goroutines和Channels,基于共享变量的并发,反射与底层编程
  • PyTorch 2.5.1: Bugs修复版发布
  • 【Android】组件化嘻嘻嘻gradle耶耶耶
  • vulnhub靶场【哈利波特】三部曲之Aragog
  • HarmonyOS开发中,如何高效定位并分析内存泄露相关问题
  • java调用ai模型:使用国产通义千问完成基于知识库的问答
  • 2023年第十四届蓝桥杯Scratch国赛真题—推箱子