Delphi-HTTP通讯及JSON解析
HTTP POST 请求函数 HttpPost
此函数用于发送带有JSON内容的POST请求到指定的URL,并接收服务器响应。它包括了必要的异常处理,确保在遇到错误时可以记录日志。
-
参数:
sUrl:目标URL。sJson:要发送的JSON格式字符串。
-
返回值:从服务器接收到的响应文本(通常也是JSON格式)。
-
关键点:
- 使用
TStringStream将JSON字符串转换为流,以便可以通过TIdHTTP.Post方法发送。 - 设置了适当的请求头信息,确保服务器知道我们发送的是JSON数据。
- 包含了连接超时设置 (
ConnectTimeout) 和字符编码配置 (ContentType,Accept,CharSet),以保证正确的数据传输。 - 异常处理机制,确保任何网络或协议错误都能被捕获并记录下来。
- 使用
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;
相关文章:
Delphi-HTTP通讯及JSON解析
HTTP POST 请求函数 HttpPost 此函数用于发送带有JSON内容的POST请求到指定的URL,并接收服务器响应。它包括了必要的异常处理,确保在遇到错误时可以记录日志。 参数: sUrl:目标URL。sJson:要发送的JSON格式字符串。 返…...
Postgres 如何使事务原子化?
原子性(“ACID”意义上的)要求 对于对数据库执行的一系列操作,要么一起提交,要么全部回滚;不允许中间状态。对于现实世界的混乱的代码来说,这是天赐之物。 这些更改将被恢复,而不是导致生产环境…...
[Vue3]简易版Vue
简易版Vue 实现ref功能 ref功能主要是收集依赖和触发依赖的过程。 export class Dep { // 创建一个类,使用时使用new Depconstructor(value) { // 初始化可传入一个值this._val value;this.effects new Set(); //收集依赖的容器,使用set数据结构}…...
ElasticSearch学习记录
服务器操作系统版本:Ubuntu 24.04 Java版本:21 Spring Boot版本:3.3.5 如果打算用GUI,虚拟机安装Ubuntu 24.04,见 虚拟机安装Ubuntu 24.04及其常用软件(2024.7)_ubuntu24.04-CSDN博客文章浏览阅读6.6k次࿰…...
LabVIEW算法执行时间评估与Windows硬件支持
在设计和实现复杂系统时,准确估算算法的执行时间是关键步骤,尤其在实时性要求较高的应用中。这一评估有助于确定是否需要依赖硬件加速来满足性能需求。首先需要对算法进行时间复杂度分析并进行实验测试,了解其在Windows系统中的运行表现。根据…...
经验帖 | Matlab安装成功后打不开的解决方法
最近在安装Matlab2023时遇到了一个问题: 按照网上的安装教程成功安装 在打开软件时 界面闪一下就消失 无法打开 但是 任务管理器显示matlab在运行中 解决方法如下: matlab快捷方式–>右键打开属性–>目标 填写许可证文件路径 D:\MATLAB\MatlabR20…...
Ubuntu Linux 文件、目录权限问题
本文为Ubuntu Linux操作系统- 第五弹 此文是在上期文件目录的内容操作基础上接着讲权限问题 上期回顾:Ubuntu Linux 目录和文件的内容操作 文件访问者身份与文件访问权限 Linux文件结构 所有者(属主)所属组(属组)其他…...
LabVIEW密码保护与反编译的安全性分析
在LabVIEW中,密码保护是一种常见的源代码保护手段,但其安全性并不高,尤其是在面对专业反编译工具时。理论上,所有软件的反编译都是可能的,尽管反编译不一定恢复完全的源代码,但足以提取程序的核心功能和算法…...
yolo11经验教训----之一
一、格式转换 可以把python中的.pt文件,导出为libtorch识别的格式: model YOLO("yolo11n.pt") model.export(format"torchscript") 二、查看结构 在c中,我用qt,这样做的: #include "…...
异步处理优化:多线程线程池与消息队列的选择与应用
目录 一、异步处理方式引入 (一)异步业务识别 (二)明确异步处理方式 二、多线程线程池(Thread Pool) (一)工作原理 (二)直面优缺点和适用场景 1.需要快…...
Hadoop生态圈框架部署 伪集群版(一)- Linux操作系统安装及配置
文章目录 前言一、下载CentOS镜像1. 下载 二、创建虚拟机hadoop三、CentOS安装与配置1. 安装CentOS2. 配置虚拟网络及虚拟网卡2.1 配置虚拟网络2.2 配置虚拟网卡 3. 安装 SSH 远程连接工具 FinalShell3.1 简介3.2 下载和安装3.2.1 下载3.2.2 安装 3.3 查看动态ip地址3.4 使用Fi…...
Go的Gin比java的Springboot更加的开箱即用?
前言 隔壁组的云计算零零后女同事,后文简称 云女士 ,非说 Go 的 Gin 框架比 Springboot 更加的开箱即用,我心想在 Java 里面 Springboot 已经打遍天下无敌手,这份底蕴岂是 Gin 能比。 但是云女士突出一个执拗,非我要…...
pickle常见Error解决
1. pickle OverflowError: cannot serialize a bytes object larger than 4 GiB 进行pickle.dump时出现上述错误,可以加上“protocol4”参数。依据:https://docs.python.org/3/library/pickle.html#data-stream-format 2. pickle EOFError: Ran out of…...
认识Java数据类型和变量
数据类型分类 基本数据类型(8个): 整数型 byte 8位 short 16位 int 32位 long 64位 默认整数类型是int类型 小数型/浮点型 float【单精度32位】 double【双进度64位】 字符型 char 16位 只能表示单个字符 布尔型 boolean 1位 只能有两个值 true 【真】 false 【…...
Qt开发技巧(二十四)滚动部件的滑动问题,Qt设置时区问题,自定义窗体样式不生效问题,编码格式问题,给按钮左边加个图,最小化后的卡死假象
继续记录一些Qt开发中的技巧操作: 1.滚动部件的滑动问题 再Linux嵌入式设备上,有时候一个页面的子部件太多,一屏放不下是需要做页面滑动,可以使用“QScrollArea”控件,拖来一个“QScrollArea”控件,将子部件…...
SHELL----正则表达式
一、文本搜索工具——grep grep -参数 条件 文件名 其中参数有以下: -i 忽略大小写 -c 统计匹配的行数 -v 取反,不显示匹配的行 -w 匹配单词 -E 等价于 egrep ,即启用扩展正则表达式 -n 显示行号 -rl 将指定目录内的文件打…...
44.5.【C语言】辨析“数组指针”和“指针数组”
目录 1.数组指针 2.指针数组 执行结果 底层分析 1.数组指针 从语文的角度理解,"数组"修饰"指针".因此数组指针是指针 例如以下代码 #include <stdio.h> int main() {char a[5] { "ABCDE" };return 0;} 其中a就是数组指针,因为数…...
node.js基础学习-express框架-路由及中间件(十)
一、前言 Express 是一个简洁、灵活的 Node.js Web 应用框架。它基于 Node.js 的内置 HTTP 模块构建,提供了一系列用于构建 Web 应用程序和 API 的功能,使开发者能够更高效地处理 HTTP 请求和响应,专注于业务逻辑的实现。 其特点包括简单易用…...
使用MSYS搭建linux开发环境踩坑笔记
前言: 使用linux系统或虚拟机进行嵌入式linux开发是常规方法; 使用MSYS是用于尝鲜和研究。 由于windows和linux的差异,使用MSYS代替Linux虚拟机会遇到很多坑。 主要原因在于: 1. windows和linux文件系统的差异:win不…...
vue3+ts+vite+ElementPlus上传进度条实时更新(UPLoad和progress)。
需求: 上传文件时,展示进度条实时更新: 下面是代码片段: <!-- 添加媒体弹窗 -- 上传 --><el-dialog v-model"centerDialogVisible" title"媒体信息" width"700" :close-on-click-modal"false&qu…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
