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 语…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...

Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...