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.xdnf.cn/news/34813.html

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

相关文章

高中数学:导数-在研究函数中的应用

文章目录 一、函数单调性解题步骤图像特征与导数值的关系 二、函数的极值与最大最小值1、函数的极值极值点的求法2、函数的最大最小值最大最小值求法函数大致图像的画法 一、函数单调性 例题 解题步骤 例题 图像特征与导数值的关系 二、函数的极值与最大最小值 1、函数的极…

OceanBase数据库使用 INSERT 语句违反唯一约束冲突解决办法及两者差异分析

当在OceanBase数据库上创建带有唯一性约束的表&#xff0c;在向表中插入唯一性约束的冲突的数据时会提示因违反唯一性约束报错&#xff0c;OceanBase在其官网上提供了两种解决策略&#xff0c;但其官网并未详细说明两种策略的差异&#xff0c;于是早上对两种策略进行一些测试&a…

【人工智能的深度分析与最新发展趋势】

人工智能的深度分析与最新发展趋势 引言 人工智能&#xff08;AI&#xff09;是现代科技的重要组成部分&#xff0c;它涉及模拟人类智能的算法和技术。随着计算能力的提升和数据量的激增&#xff0c;AI的应用正在迅速渗透到各个行业。本文将深入分析人工智能的概念、技术、应…

Spring Boot + MySQL 多线程查询与联表查询性能对比分析

Spring Boot MySQL: 多线程查询与联表查询性能对比分析 背景 在现代 Web 应用开发中&#xff0c;数据库性能是影响系统响应时间和用户体验的关键因素之一。随着业务需求的不断增长&#xff0c;单表查询和联表查询的效率问题日益凸显。特别是在 Spring Boot 项目中&#xff0…

Navicat 连接 SQL Server 详尽指南

Navicat 是一款功能强大的数据库管理工具&#xff0c;它提供了直观的图形界面&#xff0c;使用户能够轻松地管理和操作各种类型的数据库&#xff0c;包括 SQL Server。本文将详尽介绍如何使用 Navicat 连接到 SQL Server 数据库&#xff0c;包括安装设置、连接配置、常见问题排…

【多模型能力测试记录】ArgoDB分布式分析型数据库与图数据库StellarDB联合查询

前言 随着数据量的爆炸性增长和业务需求的日益复杂化&#xff0c;传统的单一模型数据库已经难以满足复杂多变的业务需求。尽管当前针对不同的数据类型&#xff0c;例如关系型数据、文档数据、图数据和时序数据业内提供了多种数据库以应对存储及处理需求&#xff0c;但是在实际…

Ansible自动化运维

1 ansible介绍和架构 1.1 什么是ansible ansible是新出现的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;puppet、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置、批量程序部署、批量运行命令等功能。 ansible…

玩FPGA不乏味

玩FPGA不乏味 Hello&#xff0c;大家好&#xff0c;之前给大家分享了大约一百多个关于FPGA的开源项目&#xff0c;涉及PCIe、网络、RISC-V、视频编码等等&#xff0c;这次给大家带来的是不枯燥的娱乐项目&#xff0c;主要偏向老的游戏内核使用FPGA进行硬解&#xff0c;涉及的内…

工商业光伏系统踏勘、设计、施工全流程讲解

随着全球能源结构的转型和环保意识的提升&#xff0c;光伏发电作为一种清洁、可再生的能源形式&#xff0c;正越来越受到工商业领域的青睐。商场、学校、医院、各类工厂等地&#xff0c;安装光伏发电系统不仅能降低运营成本&#xff0c;还可以为企业树立良好的环保形象。 一、前…

mongo开启慢日志及常用命令行操作、数据备份

mongo开启慢日志及常用命令行操作、数据备份 1.常用命令行操作2.mongo备份3.通过命令临时开启慢日志记录4.通过修改配置开启慢日志记录 1.常用命令行操作 连接命令行 格式&#xff1a;mongo -u用户名 -p密码 --host 主机地址 --port 端口号 库名&#xff1b; 如&#xff1a;连…

Vue跨标签通讯(本地存储)(踩坑)

我司有一个需求【用户指引】 需求是根标签有一个用户指引总开关&#xff0c;可以控制页面所有的用户指引是否在页面进入后初始是否默认打开&#xff0c;但是有些页面会新开标签这就设计到跨标签通讯了 我采取的方案是本地存储 重点:首先本地存储在页面是同源(即域名协议端口三…

Scrapy解析JSON响应v

在 Scrapy 中解析 JSON 响应非常常见&#xff0c;特别是当目标网站的 API 返回 JSON 数据时。Scrapy 提供了一些工具和方法来轻松处理 JSON 响应。 1、问题背景 Scrapy中如何解析JSON响应&#xff1f; 有一只爬虫(点击查看源代码)&#xff0c;它可以完美地完成常规的HTML页面…

机器学习生物医学

Nature与Science重磅&#xff01;AI与生物医药迎来百年来最重磅进展&#xff01;https://mp.weixin.qq.com/s/Vw3Jm4vVKP14_UH2jqwsxA 第一天 机器学习及生物医学中应用简介 1. 机器学习及生物医学中应用简介 2. 机器学习基本概念介绍 3. 常用机器学习模型介绍&#xff0…

ISIS五

L1路由器的次优路径问题 路由渗透 可以打标签 等价路由上面下面都把骨干区域引入非骨干 强制ATT位不置位为1 attached-bit advertise never 在AR2上禁止ATT置位为1 在AR3没有禁止呀还是有默认路由 ISIS选路机制&#xff1a; L1的路由优于L2的路由 星号bit 叫DU-bit 知道…

BFC的理解

BFC的理解 BFC是什么&#xff1f;BFC如何触发&#xff1f;BFC的作用问题解决Margin重叠问题Margin塌陷问题高度塌陷 BFC是什么&#xff1f; BFC是块级格式上下文&#xff08;Block Formatting Context&#xff09;&#xff0c;是CSS布局的一个概念&#xff0c;在BFC布局里面的…

C++入门基础

一、C的第一个程序 C兼容C语⾔绝大多数的语法&#xff0c;所以C语言实现的hello world依旧可以运行&#xff0c;C中需要把定义⽂件 代码后缀改为.cpp&#xff0c;vs编译器看到是.cpp就会调⽤C编译器编译&#xff0c;linux下要⽤g编译&#xff0c;不再是gcc #include<stdio.h…

VMware 安装国产操作系统UOS过程

VMware是一个虚拟化的平台&#xff0c;在这个平台上能训练操作系统&#xff08;客户端版本和服务器端版本&#xff09;&#xff0c;在真机的条件下虚拟出更多的应用场景。&#xff08;如果你的硬件设备足够强悍&#xff0c;可以通常这个平台虚拟出256个终端&#xff08;可能会更…

仿蝠鲼软体机器人实现高速多模态游动

近期&#xff0c;华南理工大学周奕彤老师研究团队最新成果"Manta Ray-Inspired Soft Robotic Swimmer for High-speed and Multi-modal Swimming"被机器人领域会议 IEEE/RSJ International Conference on Intelligent Robots and Systems&#xff08;IROS 2024&#…

稀土阻燃剂:电子设备的安全守护者

稀土阻燃剂是一类以稀土元素为基础的阻燃材料&#xff0c;广泛应用于电子设备中&#xff0c;主要用于提高材料的阻燃性能和热稳定性&#xff0c;以满足现代电子设备对安全性和可靠性的要求。稀土阻燃剂在电子设备中的应用具有以下特点&#xff1a; 1. 电路板&#xff1a;稀土阻…

Issue id: AppLinkUrlError 应用intent-filter 配置深链接 URL 问题分析 | AndroidManifest

AndroidManifest.xml 配置文件中&#xff0c;对 activity 组件进行声明的时候&#xff0c;独立应用在 IDE 显示 intent-filter 报错&#xff0c;但不影响实际编译&#xff0c;因为是系统应用&#xff0c;肯定会有此 URL 的存在。 AOSP 源码&#xff1a; <activity android:…