Delphi-HTTP通讯及JSON解析

news2024/12/26 19:19:16

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;
var
  JsonToSend: TStringStream;
  idHttp1: TIdHTTP;
begin
  EnterCriticalSection(gPostCritDML);
  try
    JsonToSend := TStringStream.Create(sJson, TEncoding.UTF8);
    Result := '';
    try
      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';

      try
        Result := idHttp1.Post(sUrl, JsonToSend);
      except
        on E: Exception do
        begin
          SaveLogMsg('与后台服务通讯异常!' + e.Message);
        end;
      end;
    finally
      FreeAndNil(JsonToSend);
    end;
  finally
    idHttp1.Free;
    LeaveCriticalSection(gPostCritDML);
  end;
end;

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

GET

function HttpGet(sUrl: string): string;
var
  idHttp1: TIdHTTP;
begin
  EnterCriticalSection(gGetCritDML);
  try
    Result := '';
    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';

    try
      Result := idHttp1.Get(sUrl);
    except
      on E: Exception do
      begin
        SaveLogMsg(sUrl);
        SaveLogMsg('与后台服务通讯异常!' + e.Message);
      end;
    end;
  finally
    idHttp1.Free;
    LeaveCriticalSection(gGetCritDML);
  end;
end;

JSON解析

导入System.JSON

function GetProduceId(cName: string; localComm: CLocalComm): string;
var
  sRsp, sJson: string;
  jRet: TJSONObject;
begin
  Result := '';
  sJson := '{"factoryTag":"02","num":1}';

  sRsp := HttpPost(ReadConfStr('url', 'sc_url') + 'productIdBd', sJson);
  if (sRsp <> '') and (Pos('{', sRsp) > 0) and (Pos('}', sRsp) > 0) then
  begin
    jRet := TJSONObject.ParseJSONValue(sRsp) as TJSONObject;
    if jRet.GetValue('code').Value = '0000' then
    begin

    end;
  end;
end;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2254595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈CI持续集成

1.什么是持续集成 持续集成&#xff08;Continuous Integration&#xff09;&#xff08;CI&#xff09;是一种软件开发实践&#xff0c;团队成员频繁地将他们的工作成果集成到一起(通常每人每天至少提交一次&#xff0c;这样每天就会有多次集成)&#xff0c;并且在每次提交后…

电子商务人工智能指南 1/6 - 搜索、广告和发现

介绍 81% 的零售业高管表示&#xff0c; AI 至少在其组织中发挥了中等至完全的作用。然而&#xff0c;78% 的受访零售业高管表示&#xff0c;很难跟上不断发展的 AI 格局。 近年来&#xff0c;电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…

【Git教程 之 版本控制】

Git教程 之 版本控制 Git教程 之 版本控制版本控制版本控制类型单用户版本控制系统&#xff08;VCS&#xff09;单用户版本控制系统&#xff08;VCS&#xff09;特点常见的单用户版本控制系统&#xff08;VCS&#xff09; 集中式版本控制系统&#xff08;CVCS&#xff09;集中式…

.NET Framework修复工具

某些精简Windows系统或者第三方下载的改版Windows系统在安装.NET Framework的时候会出现类似下面的错误信息: 可以使用微软官方出的.NET Framework修复工具解决, 下载地址: 【免费】.NETFramework修复工具资源-CSDN文库 下载后运行即可修复系统里的.NET Framework

计算机毕业设计Python轨道交通客流预测分析可视化 智慧交通 机器学习 深度学习 人工智能 爬虫 交通大数据

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

从计算服务器角度看智算与算力

计算服务器于智算和算力领域的地位堪称中流砥柱。人工智能旨在赋予计算机人类智能的使命&#xff0c;对计算服务器提出了近乎苛刻的要求。 在智算层面&#xff0c;它是计算服务器通向高效能的核心动力。凭借 CPU 与 GPU、FPGA、ASIC 等构建的异构组合&#xff0c;计算服务器可…

Lighthouse(灯塔)—— Chrome 浏览器性能测试工具

1.认识 Lighthouse Lighthouse 是 Google 开发的一款开源性能测试工具&#xff0c;用于分析网页或 Web 应用的性能、可访问性、最佳实践、安全性以及 SEO 等关键指标。开发人员可以通过 Lighthouse 快速了解网页的性能瓶颈&#xff0c;并基于优化建议进行改进。 核心功能&…

Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计)

Logistic Regression&#xff08;逻辑回归&#xff09;、Maximum Likelihood Estimatio&#xff08;最大似然估计&#xff09; 逻辑回归&#xff08;Logistic Regression&#xff0c;LR&#xff09;逻辑回归的基本思想逻辑回归模型逻辑回归的目标最大似然估计优化方法 逻辑回归…

使用Hadoop MapReduce进行大规模数据爬取

Hadoop MapReduce概述 Hadoop MapReduce是一个编程模型&#xff0c;用于处理和生成大数据集。它由Map和Reduce两个主要阶段组成。Map阶段负责处理输入数据&#xff0c;并将结果输出为键值对&#xff1b;Reduce阶段则对Map阶段的输出进行汇总和合并&#xff0c;生成最终结果。 …

AI驱动的低代码平台:解密背后的算法与架构创新

引言 在如今的数字化浪潮中&#xff0c;企业对软件的需求正以前所未有的速度增长。传统的开发方式由于开发周期长、成本高&#xff0c;已逐渐无法满足市场的快速变化。而低代码平台的出现&#xff0c;使得开发者和业务人员能够以极简的方式快速构建应用。然而&#xff0c;随着企…

【Spring工具插件】lombok使用和EditStarter插件

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 引入 一&#xff1a;lombok介绍 1&#xff1a;引入依赖 2&#xff1a;使用 3&#xff1a;原理 4&…

释放超凡性能,打造鸿蒙原生游戏卓越体验

11月26日在华为Mate品牌盛典上&#xff0c;全新Mate70系列及多款全场景新品正式亮相。在游戏领域&#xff0c;HarmonyOS NEXT加持下游戏的性能得到充分释放。HarmonyOS SDK为开发者提供了软硬协同的系统级图形加速解决方案——Graphics Accelerate Kit&#xff08;图形加速服务…

Zynq(6)FATFS读写eMMC

文章目录 1.简介eMMc与FAT2.eMMC与FAT的关系3.添加xilinx库4.用 FATFS完成emmc的读写5.传送门 1.简介eMMc与FAT eMMC (embedded MultiMediaCard) 是一种嵌入式闪存存储解决方案&#xff0c;由NAND闪存和内置的控制器组成&#xff0c;NAND闪存存储数据&#xff0c;而控制器负责…

【Linux】gdb / cgdb 调试 + 进度条

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 一、Linux调试器-gdb &#x1f31f;开始使用 &#x1f320;小贴士&#xff1a; &#x1f31f;gdb指令 &#x1f320;小贴士&#xff1a; ✨watch 监视 ✨打条件断点 二、小程序----进…

如何解决maven项目使用Ctrl + /添加注释时的顶格问题

一、问题描述 相信后端开发的程序员一定很熟悉IDEA编译器和Maven脚手架&#xff0c;使用IDEA新建一个Maven工程&#xff0c;通过SpringBoot快速构建Spring项目。在Spring项目pom.xml文件中想添加注释&#xff0c;快捷键Ctrl /&#xff0c;但是总是顶格书写。 想保证缩进统一…

python学习——数据的验证

文章目录 1. str.isdigit()2. str.isnumeric()3. str.isalpha()4. str.isalnum()5. str.islower()6. str.isupper()7. str.istitle()8. str.isspace()实操 以下是Python中字符串数据验证方法的详细解释&#xff1a; 1. str.isdigit() 这个方法用于检查字符串中的所有字符是否都…

基于Springboot+Vue的在线答题闯关系统

基于SpringbootVue的在线答题闯关系统 前言&#xff1a;随着在线教育的快速发展&#xff0c;传统的教育模式逐渐向互联网教育模式转型。在线答题系统作为其中的一个重要组成部分&#xff0c;能够帮助用户通过互动式的学习方式提升知识掌握度。本文基于Spring Boot和Vue.js框架&…

Web(CSS+JS+HTML实现简单界面)

前言 写的是个人博客界面&#xff0c;代码比较冗余&#xff0c;web的一个小作业。。。。。。 因为后面改了一次&#xff0c;有些css是直接写到了html文件中&#xff0c;重复的代码也比较多。 项目结构 CSS style.css * {margin: 0;padding: 0;box-sizing: border-box; }b…

Scala:正则表达式

object test03 {//正则表达式def main(args: Array[String]): Unit {//定义一个正则表达式//1.[ab]:表示匹配一个字符&#xff0c;或者是a&#xff0c;或者是b//2.[a-z]:表示从a到z的26个字母中的任意一个//3.[A-Z]:表示从A到Z的26个字母中的任意一个//4.[0-9]:表示从0到9的10…

经验帖 | Matlab安装成功后打不开的解决方法

最近在安装Matlab2023时遇到了一个问题&#xff1a; 按照网上的安装教程成功安装 在打开软件时 界面闪一下就消失 无法打开 但是 任务管理器显示matlab在运行中 解决方法如下&#xff1a; matlab快捷方式–>右键打开属性–>目标 填写许可证文件路径 D:\MATLAB\MatlabR20…