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

Delphi-HTTP通讯及JSON解析

HTTP POST 请求函数 HttpPost

此函数用于发送带有JSON内容的POST请求到指定的URL,并接收服务器响应。它包括了必要的异常处理,确保在遇到错误时可以记录日志。

  • 参数

    • sUrl:目标URL。
    • sJson:要发送的JSON格式字符串。
  • 返回值:从服务器接收到的响应文本(通常也是JSON格式)。

  • 关键点

    • 使用 TStringStream 将JSON字符串转换为流,以便可以通过 TIdHTTP.Post 方法发送。
    • 设置了适当的请求头信息,确保服务器知道我们发送的是JSON数据。
    • 包含了连接超时设置 (ConnectTimeout) 和字符编码配置 (ContentTypeAcceptCharSet),以保证正确的数据传输。
    • 异常处理机制,确保任何网络或协议错误都能被捕获并记录下来。

HTTP GET 请求函数 HttpGet

此函数用于发起GET请求并获取服务器返回的数据。它的结构与 HttpPost 类似,但不需要传递额外的数据体。

  • 参数

    • sUrl:目标URL。
  • 返回值:从服务器接收到的响应文本。

  • 关键点

    • 同样设置了请求头来指定接受的内容类型。
    • 提供了相同的异常处理逻辑。

JSON 解析函数 GetProduceId

该函数演示了如何调用 HttpPost 函数并与后端服务交互以获取产品ID。它还展示了如何解析返回的JSON响应。

  • 参数

    • cName:可能用于标识客户端或其他上下文信息(未在代码中使用)。
    • localComm:可能是某种通信接口或配置对象(未在代码中使用)。
  • 返回值:根据需要返回特定值(当前为空)。

  • 关键点

    • 构造了一个JSON字符串作为请求体的一部分。
    • 调用了 HttpPost 发送请求并接收响应。
    • 使用 TJSONObject.ParseJSONValue 方法将响应字符串解析为 TJSONObject 对象。
    • 检查响应中的 code 字段是否表示成功(假设 0000 是成功的状态码)。

POST

function HttpPost(sUrl, sJson: string): string;
varJsonToSend: TStringStream;idHttp1: TIdHTTP;
beginEnterCriticalSection(gPostCritDML);tryJsonToSend := TStringStream.Create(sJson, TEncoding.UTF8);Result := '';tryidHttp1 := TIdHTTP.Create(nil);idHttp1.HTTPOptions := [hoKeepOrigProtocol, hoForceEncodeParams];idHttp1.ConnectTimeout := 2000;idHttp1.Response.ContentType := 'application/json;charset=utf-8';idHttp1.Request.Accept := 'application/json;charset=utf-8';idHttp1.Request.ContentType := 'application/json;charset=utf-8';idHttp1.Request.CharSet := 'utf-8';tryResult := idHttp1.Post(sUrl, JsonToSend);excepton E: Exception dobeginSaveLogMsg('与后台服务通讯异常!' + e.Message);end;end;finallyFreeAndNil(JsonToSend);end;finallyidHttp1.Free;LeaveCriticalSection(gPostCritDML);end;
end;

sJson是JSON格式的字符串,例如:sJson := '{"factoryTag":"02","num":1}'

GET

function HttpGet(sUrl: string): string;
varidHttp1: TIdHTTP;
beginEnterCriticalSection(gGetCritDML);tryResult := '';idHttp1 := TIdHTTP.Create(nil);idHttp1.HTTPOptions := [hoKeepOrigProtocol, hoForceEncodeParams];idHttp1.ConnectTimeout := 2000;idHttp1.Response.ContentType := 'application/json;charset=utf-8';idHttp1.Request.Accept := 'application/json;charset=utf-8';idHttp1.Request.ContentType := 'application/json;charset=utf-8';idHttp1.Request.CharSet := 'utf-8';tryResult := idHttp1.Get(sUrl);excepton E: Exception dobeginSaveLogMsg(sUrl);SaveLogMsg('与后台服务通讯异常!' + e.Message);end;end;finallyidHttp1.Free;LeaveCriticalSection(gGetCritDML);end;
end;

JSON解析

导入System.JSON

function GetProduceId(cName: string; localComm: CLocalComm): string;
varsRsp, sJson: string;jRet: TJSONObject;
beginResult := '';sJson := '{"factoryTag":"02","num":1}';sRsp := HttpPost(ReadConfStr('url', 'sc_url') + 'productIdBd', sJson);if (sRsp <> '') and (Pos('{', sRsp) > 0) and (Pos('}', sRsp) > 0) thenbeginjRet := TJSONObject.ParseJSONValue(sRsp) as TJSONObject;if jRet.GetValue('code').Value = '0000' thenbeginend;end;
end;

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

相关文章:

  • Postgres 如何使事务原子化?
  • [Vue3]简易版Vue
  • ElasticSearch学习记录
  • LabVIEW算法执行时间评估与Windows硬件支持
  • 经验帖 | Matlab安装成功后打不开的解决方法
  • Ubuntu Linux 文件、目录权限问题
  • LabVIEW密码保护与反编译的安全性分析
  • yolo11经验教训----之一
  • 异步处理优化:多线程线程池与消息队列的选择与应用
  • Hadoop生态圈框架部署 伪集群版(一)- Linux操作系统安装及配置
  • Go的Gin比java的Springboot更加的开箱即用?
  • pickle常见Error解决
  • 认识Java数据类型和变量
  • Qt开发技巧(二十四)滚动部件的滑动问题,Qt设置时区问题,自定义窗体样式不生效问题,编码格式问题,给按钮左边加个图,最小化后的卡死假象
  • SHELL----正则表达式
  • 44.5.【C语言】辨析“数组指针”和“指针数组”
  • node.js基础学习-express框架-路由及中间件(十)
  • 使用MSYS搭建linux开发环境踩坑笔记
  • vue3+ts+vite+ElementPlus上传进度条实时更新(UPLoad和progress)。
  • AspNet WebAPI 模型绑定问题
  • Android 图形系统之七:SurfaceFlinger
  • 14、鸿蒙学习——管理通知角标
  • TongRDS分布式内存数据缓存中间件
  • [在线实验]-RabbitMQ镜像的下载与部署
  • Linux 系统文件描述符(File Descriptor)小白级介绍
  • 【Verilog】实验二 数据选择器的设计与vivado集成开发环境
  • IDL学习笔记(三)OMI数据处理。hdf5文件读取,图像反转,GeoTiff区别,月季年均值计算提取输出,单位转换,运行时间计算
  • 深入浅出:PHP中的数据类型全解析
  • 要使用 OpenResty 创建一个接口,返回客户端的 IP 地址,并以 JSON 格式输出
  • 智慧油客:从初识、再识OceanBase,到全栈上线