XML通过HTTP POST 请求发送到指定的 API 地址,进行数据回传
代码结构说明
这段代码的主要功能是:
从指定文件夹中读取所有 XML 文件。
将每个 XML 文件的内容通过 HTTP POST 请求发送到指定的 API 地址。
处理服务器的响应,并记录每个文件的处理结果。
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Xml;namespace EMS数据回传
{class Program{static void Main(string[] args){// XML 文件夹路径string xmlFolderPath = @"Z:\toMesXml";// 服务器 API 地址string apiUrl = "服务器 API 地址";// 你的 AppIdstring appId = "你的 AppId";// 你的 AppKeystring appKey = "你的 AppKey";// Topic 名称string topic = "Topic 名称";// 消息 Tagstring tag = "消息 Tag";try{// 获取文件夹中的所有 XML 文件string[] xmlFiles = Directory.GetFiles(xmlFolderPath, "*.xml");// 如果文件夹中没有 XML 文件,输出提示并退出if (xmlFiles.Length == 0){Console.WriteLine("文件夹中没有 XML 文件。");return;}// 遍历每个 XML 文件并发送foreach (string xmlFile in xmlFiles){try{// 输出当前正在处理的文件Console.WriteLine(string.Format("正在处理文件: {0}", xmlFile));// 1. 读取 XML 文件内容string xmlContent = ReadXmlFile(xmlFile);// 2. 发送 HTTP 请求string response = SendHttpRequest(apiUrl, appId, appKey, topic, tag, xmlContent);// 3. 处理响应,输出发送成功的信息Console.WriteLine(string.Format("文件 {0} 发送成功,服务器响应: {1}", xmlFile, response));}catch (XmlException ex){// 捕获 XML 格式错误Console.WriteLine(string.Format("文件 {0} 格式错误: {1}", xmlFile, ex.Message));}catch (IOException ex){// 捕获文件读取失败错误Console.WriteLine(string.Format("文件 {0} 读取失败: {1}", xmlFile, ex.Message));}catch (WebException ex){// 捕获 HTTP 请求失败错误Console.WriteLine(string.Format("文件 {0} 发送失败,HTTP 错误: {1}", xmlFile, ex.Message));}catch (Exception ex){// 捕获其他未知错误Console.WriteLine(string.Format("文件 {0} 发生未知错误: {1}", xmlFile, ex.Message));}}}catch (Exception ex){// 捕获全局错误Console.WriteLine("发生错误: " + ex.Message);}}// 读取 XML 文件内容static string ReadXmlFile(string filePath){// 检查文件是否存在,如果不存在则抛出异常if (!File.Exists(filePath)){throw new FileNotFoundException("XML 文件未找到: " + filePath);}// 使用 StreamReader 指定编码读取文件using (StreamReader reader = new StreamReader(filePath, Encoding.GetEncoding("GB2312"))) // 根据文件编码调整{// 读取文件的全部内容并返回string xmlContent = reader.ReadToEnd();return xmlContent;}}// 发送 HTTP 请求static string SendHttpRequest(string url, string appId, string appKey, string topic, string tag, string xmlContent){// 创建 HTTP 请求HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);// 设置请求方法为 POSTrequest.Method = "POST";// 设置请求内容类型为 XMLrequest.ContentType = "application/xml";// 添加请求头request.Headers.Add("X-HW-ID", appId); // AppIdrequest.Headers.Add("X-HW-APPKEY", appKey); // AppKeyrequest.Headers.Add("MsgTopic", topic); // Topicrequest.Headers.Add("MsgTag", tag); // Tag// 将 XML 内容转换为字节数组byte[] data = Encoding.UTF8.GetBytes(xmlContent);// 设置请求内容的长度request.ContentLength = data.Length;// 将 XML 内容写入请求体using (Stream requestStream = request.GetRequestStream()){requestStream.Write(data, 0, data.Length);}// 获取服务器响应using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())using (Stream responseStream = response.GetResponseStream())using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8)){// 读取服务器响应的内容并返回return reader.ReadToEnd();}}}
}
代码功能详解
-
文件夹路径和 API 配置:
-
xmlFolderPath:指定存放 XML 文件的文件夹路径。 -
apiUrl:华为服务器的 API 地址。 -
appId和appKey:用于身份验证的 AppId 和 AppKey。 -
topic和tag:消息的主题和标签。
-
-
读取文件夹中的 XML 文件:
-
使用
Directory.GetFiles方法获取文件夹中所有.xml文件。 -
如果文件夹中没有文件,输出提示并退出程序。
-
-
遍历并处理每个 XML 文件:
-
使用
foreach循环遍历每个文件。 -
调用
ReadXmlFile方法读取文件内容。 -
调用
SendHttpRequest方法将文件内容发送到服务器。 -
捕获并处理可能发生的异常(如文件格式错误、读取失败、HTTP 请求失败等)。
-
-
读取 XML 文件内容:
-
使用
StreamReader读取文件内容,并指定文件编码为GB2312。 -
如果文件不存在,抛出
FileNotFoundException异常。
-
-
发送 HTTP 请求:
-
使用
HttpWebRequest创建 HTTP POST 请求。 -
设置请求头(AppId、AppKey、Topic、Tag)。
-
将 XML 内容写入请求体。
-
获取服务器响应并返回响应内容。
-
-
异常处理:
-
对文件读取、XML 解析、HTTP 请求等操作进行异常捕获,确保程序健壮性。
-
代码运行流程
-
程序启动后,检查指定文件夹中是否存在 XML 文件。
-
如果存在文件,逐个读取文件内容并发送到服务器。
-
每次发送后,输出服务器的响应内容。
-
如果发生错误,输出错误信息并继续处理下一个文件。
注意事项
-
文件编码:
-
代码中假设 XML 文件的编码是
GB2312,如果文件编码不同,需要调整StreamReader的编码参数。
-
-
HTTP 请求超时:
-
如果服务器响应较慢,可能需要设置
HttpWebRequest.Timeout属性,避免请求长时间挂起。
-
-
异常处理:
-
代码中对常见异常进行了捕获,但可以根据实际需求进一步细化异常处理逻辑。
-
如果有其他问题,欢迎继续讨论!
相关文章:
XML通过HTTP POST 请求发送到指定的 API 地址,进行数据回传
代码结构说明 这段代码的主要功能是: 从指定文件夹中读取所有 XML 文件。 将每个 XML 文件的内容通过 HTTP POST 请求发送到指定的 API 地址。 处理服务器的响应,并记录每个文件的处理结果。 using System; using System.IO; using System.Net; usin…...
科大讯飞前端面试题及参考答案 (下)
除了 echarts 还了解其它画图工具吗? 除了 Echarts,还有不少优秀的画图工具可供选择使用。 Highcharts:它是一款功能强大且应用广泛的图表绘制工具,支持多种常见的图表类型,像柱状图、折线图、饼图、散点图等,同时也能创建较为复杂的图表,比如仪表盘图表、极坐标图等。H…...
【理论】测试框架体系TDD、BDD、ATDD、DDT介绍
一、测试框架是什么 测试框架是一组用于创建和设计测试用例的指南或规则。框架由旨在帮助 QA 专业人员更有效地测试的实践和工具的组合组成。 这些指南可能包括编码标准、测试数据处理方法、对象存储库、存储测试结果的过程或有关如何访问外部资源的信息。 A testing framewo…...
如何进行全脑思维(左脑,右脑,全脑)
1)每人都有一个价值100万美元的点子 . 谁能帮助实施这个点子? . 实施这个点子需要哪些资源? . 推行这个点子需要得到哪些许可? . 是否有实施这个点子的最佳时间? . 作为实施的开始,最简单的做法是什么? 2) 进行理性的、逻辑的、量的思维那一半,而排除了大脑的…...
领域驱动设计 2
1.幂等设计 1.1.定义 无论进行多少次相同的操作,结果都保持一致的设计。 1.2.写操作的幂等性 1.2.1.Insert 指定唯一标识写,是具有幂等性的。 不指定唯一标识写,不具备幂等性。 1.2.2.Update 如果更新操作依赖于与历史状态,…...
十年后LabVIEW编程知识是否会过时?
在考虑LabVIEW编程知识在未来十年内的有效性时,我们可以从几个角度进行分析: 1. 技术发展与软件更新 随着技术的快速发展,许多编程工具和平台不断更新和改进,LabVIEW也不例外。十年后,可能会有新的编程语言或平台…...
ARM交叉编译Boost库
Boost下载:点击跳转 编译过程: 生成project-config.jam ./bootstrap.sh --with-librariesfilesystem,thread --with-toolsetgcc 2. 修改project-config.jam(位于第12行附近) if ! gcc in [ feature.values <toolset> ] …...
uniapp:钉钉小程序需要录音权限及调用录音
{// ... 其他配置项"mp-dingtalk": {"permission": {"scope.userLocation" : {"desc" : "系统希望获得您的定位用于确认您周围的设施数据"},"scope.bluetooth" : {"desc" : "你的蓝牙权限将用于小…...
Swin Transformer模型详解(附pytorch实现)
写在前面 Swin Transformer(Shifted Window Transformer)是一种新颖的视觉Transformer模型,在2021年由微软亚洲研究院提出。这一模型提出了一种基于局部窗口的自注意力机制,显著改善了Vision Transformer(ViT…...
gitee 使用教程
前言 Gitee 是一个中国的开源代码托管平台,类似于 GitHub,旨在为开发者提供一个高效、稳定、安全的代码管理和协作开发环境。Gitee 支持 Git 协议,可以托管 Git 仓库,进行版本控制、代码协作、项目管理等操作。 1. Gitee 的主要…...
基于YOLOv8的水下目标检测系统
基于YOLOv8的水下目标检测系统 (价格90) 使用的是DUO水下目标检测数据集 训练集 6671张 验证集 1111张 测试集 1111张 包含 [holothurian, echinus, scallop, starfish] [海参, 海胆, 扇贝, 海星] 4个类 通过PYQT构建UI界面,包含图片检测,视…...
浅析PCIe链路均衡技术原理与演进
在现代计算机硬件体系的持续演进中,PCIe技术始终扮演着核心角色,其作为连接 CPU 与各类周边设备的关键高速通信链路,不断推动着计算机性能边界的拓展。而 PCIe Link Equalization均衡技术,作为保障数据在高速传输过程中准确性与稳…...
js代理模式
允许在不改变原始对象的情况下,通过代理对象来访问原始对象。代理对象可以在访问原始对象之前或之后,添加一些额外的逻辑或功能。 科学上网过程 一般情况下,在访问国外的网站,会显示无法访问 因为在dns解析过程,这些ip被禁止解析,所以显示无法访问 引…...
C++虚函数(八股总结)
什么是虚函数 虚函数是在父类中定义的一种特殊类型的函数,允许子类重写该函数以适应其自身需求。虚函数的调用取决于对象的实际类型,而不是指针或引用类型。通过将函数声明为虚函数,可以使继承层次结构中的每个子类都能够使用其自己的实现&a…...
vue的路由守卫逻辑处理不当导致部署在nginx上无法捕捉后端异步响应消息等问题
近期对前端的路由卫士有了更多的认识。 何为路由守卫?这可能是一种约定俗成的名称。就是VUE中的自定义函数,用来处理路由跳转。 import { createRouter, createWebHashHistory } from "vue-router";const router createRouter({history: cr…...
[备忘.OFD]OFD是什么、OFD与PDF格式文件的互转换
OFD(Open Fixed-layout Document)是一种由工业和信息化部软件司牵头中国电子技术标准化研究院制定的版式文档国家标准,属于中国的一种自主格式。OFD旨在打破政府部门和党委机关电子公文格式不统一的问题,以方便电子文档的存…...
Pycharm连接远程解释器
这里写目录标题 0 前言1 给项目添加解释器2 通过SSH连接3 找到远程服务器的torch环境所对应的python路径,并设置同步映射(1)配置服务器的系统环境(2)配置服务器的conda环境 4 进入到程序入口(main.py&#…...
嵌入式系统 tensorflow
🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 探索嵌入式系统中的 TensorFlow:机遇与挑战一、TensorFlow 适配嵌入式的优势二、面临的硬件瓶颈三、软件优化策略四、实…...
深度学习知识点:LSTM
文章目录 1.应用现状2.发展历史3.基本结构4.LSTM和RNN的差异 1.应用现状 长短期记忆神经网络(LSTM)是一种特殊的循环神经网络(RNN)。原始的RNN在训练中,随着训练时间的加长以及网络层数的增多,很容易出现梯度爆炸或者梯度消失的问…...
11.C语言内存管理与常用内存操作函数解析
目录 1.简介2.void 指针3.malloc4.free5.calloc6.realloc7.restrict 说明符8.memcpy9.memmove()10.memcmp 1.简介 本篇原文为:C语言内存管理与常用内存操作函数解析。 更多C进阶、rust、python、逆向等等教程,可点击此链接查看:酷程网 C 语…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
