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 语…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
