当前位置: 首页 > 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;

相关文章:

Delphi-HTTP通讯及JSON解析

HTTP POST 请求函数 HttpPost 此函数用于发送带有JSON内容的POST请求到指定的URL&#xff0c;并接收服务器响应。它包括了必要的异常处理&#xff0c;确保在遇到错误时可以记录日志。 参数&#xff1a; sUrl&#xff1a;目标URL。sJson&#xff1a;要发送的JSON格式字符串。 返…...

Postgres 如何使事务原子化?

原子性&#xff08;“ACID”意义上的&#xff09;要求 对于对数据库执行的一系列操作&#xff0c;要么一起提交&#xff0c;要么全部回滚&#xff1b;不允许中间状态。对于现实世界的混乱的代码来说&#xff0c;这是天赐之物。 这些更改将被恢复&#xff0c;而不是导致生产环境…...

[Vue3]简易版Vue

简易版Vue 实现ref功能 ref功能主要是收集依赖和触发依赖的过程。 export class Dep { // 创建一个类&#xff0c;使用时使用new Depconstructor(value) { // 初始化可传入一个值this._val value;this.effects new Set(); //收集依赖的容器&#xff0c;使用set数据结构}…...

ElasticSearch学习记录

服务器操作系统版本&#xff1a;Ubuntu 24.04 Java版本&#xff1a;21 Spring Boot版本&#xff1a;3.3.5 如果打算用GUI&#xff0c;虚拟机安装Ubuntu 24.04&#xff0c;见 虚拟机安装Ubuntu 24.04及其常用软件(2024.7)_ubuntu24.04-CSDN博客文章浏览阅读6.6k次&#xff0…...

LabVIEW算法执行时间评估与Windows硬件支持

在设计和实现复杂系统时&#xff0c;准确估算算法的执行时间是关键步骤&#xff0c;尤其在实时性要求较高的应用中。这一评估有助于确定是否需要依赖硬件加速来满足性能需求。首先需要对算法进行时间复杂度分析并进行实验测试&#xff0c;了解其在Windows系统中的运行表现。根据…...

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

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

Ubuntu Linux 文件、目录权限问题

本文为Ubuntu Linux操作系统- 第五弹 此文是在上期文件目录的内容操作基础上接着讲权限问题 上期回顾&#xff1a;Ubuntu Linux 目录和文件的内容操作 文件访问者身份与文件访问权限 Linux文件结构 所有者&#xff08;属主&#xff09;所属组&#xff08;属组&#xff09;其他…...

LabVIEW密码保护与反编译的安全性分析

在LabVIEW中&#xff0c;密码保护是一种常见的源代码保护手段&#xff0c;但其安全性并不高&#xff0c;尤其是在面对专业反编译工具时。理论上&#xff0c;所有软件的反编译都是可能的&#xff0c;尽管反编译不一定恢复完全的源代码&#xff0c;但足以提取程序的核心功能和算法…...

yolo11经验教训----之一

一、格式转换 可以把python中的.pt文件&#xff0c;导出为libtorch识别的格式&#xff1a; model YOLO("yolo11n.pt") model.export(format"torchscript") 二、查看结构 在c中&#xff0c;我用qt&#xff0c;这样做的&#xff1a; #include "…...

异步处理优化:多线程线程池与消息队列的选择与应用

目录 一、异步处理方式引入 &#xff08;一&#xff09;异步业务识别 &#xff08;二&#xff09;明确异步处理方式 二、多线程线程池&#xff08;Thread Pool&#xff09; &#xff08;一&#xff09;工作原理 &#xff08;二&#xff09;直面优缺点和适用场景 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更加的开箱即用?

前言 隔壁组的云计算零零后女同事&#xff0c;后文简称 云女士 &#xff0c;非说 Go 的 Gin 框架比 Springboot 更加的开箱即用&#xff0c;我心想在 Java 里面 Springboot 已经打遍天下无敌手&#xff0c;这份底蕴岂是 Gin 能比。 但是云女士突出一个执拗&#xff0c;非我要…...

pickle常见Error解决

1. pickle OverflowError: cannot serialize a bytes object larger than 4 GiB 进行pickle.dump时出现上述错误&#xff0c;可以加上“protocol4”参数。依据&#xff1a;https://docs.python.org/3/library/pickle.html#data-stream-format 2. pickle EOFError: Ran out of…...

认识Java数据类型和变量

数据类型分类 基本数据类型(8个)&#xff1a; 整数型 byte 8位 short 16位 int 32位 long 64位 默认整数类型是int类型 小数型/浮点型 float【单精度32位】 double【双进度64位】 字符型 char 16位 只能表示单个字符 布尔型 boolean 1位 只能有两个值 true 【真】 false 【…...

Qt开发技巧(二十四)滚动部件的滑动问题,Qt设置时区问题,自定义窗体样式不生效问题,编码格式问题,给按钮左边加个图,最小化后的卡死假象

继续记录一些Qt开发中的技巧操作&#xff1a; 1.滚动部件的滑动问题 再Linux嵌入式设备上&#xff0c;有时候一个页面的子部件太多&#xff0c;一屏放不下是需要做页面滑动&#xff0c;可以使用“QScrollArea”控件&#xff0c;拖来一个“QScrollArea”控件&#xff0c;将子部件…...

SHELL----正则表达式

一、文本搜索工具——grep grep -参数 条件 文件名 其中参数有以下&#xff1a; -i 忽略大小写 -c 统计匹配的行数 -v 取反&#xff0c;不显示匹配的行 -w 匹配单词 -E 等价于 egrep &#xff0c;即启用扩展正则表达式 -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 模块构建&#xff0c;提供了一系列用于构建 Web 应用程序和 API 的功能&#xff0c;使开发者能够更高效地处理 HTTP 请求和响应&#xff0c;专注于业务逻辑的实现。 其特点包括简单易用…...

使用MSYS搭建linux开发环境踩坑笔记

前言&#xff1a; 使用linux系统或虚拟机进行嵌入式linux开发是常规方法&#xff1b; 使用MSYS是用于尝鲜和研究。 由于windows和linux的差异&#xff0c;使用MSYS代替Linux虚拟机会遇到很多坑。 主要原因在于&#xff1a; 1. windows和linux文件系统的差异&#xff1a;win不…...

vue3+ts+vite+ElementPlus上传进度条实时更新(UPLoad和progress)。

需求&#xff1a; 上传文件时&#xff0c;展示进度条实时更新&#xff1a; 下面是代码片段: <!-- 添加媒体弹窗 -- 上传 --><el-dialog v-model"centerDialogVisible" title"媒体信息" width"700" :close-on-click-modal"false&qu…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...

Docker、Wsl 打包迁移环境

电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本&#xff1a; 2.2.4.0 内核版本&#xff1a; 5.15.153.1-2 WSLg 版本&#xff1a; 1.0.61 MSRDC 版本&#xff1a; 1.2.5326 Direct3D 版本&#xff1a; 1.611.1-81528511 DXCore 版本&#xff1a; 10.0.2609…...