XML通过HTTP POST 请求发送到指定的 API 地址,进行数据回传

server/2025/1/12 8:19:52/

代码结构说明
这段代码的主要功能是:

从指定文件夹中读取所有 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();}}}
}

代码功能详解

  1. 文件夹路径和 API 配置

    • xmlFolderPath:指定存放 XML 文件的文件夹路径。

    • apiUrl:华为服务器的 API 地址。

    • appId 和 appKey:用于身份验证的 AppId 和 AppKey。

    • topic 和 tag:消息的主题和标签。

  2. 读取文件夹中的 XML 文件

    • 使用 Directory.GetFiles 方法获取文件夹中所有 .xml 文件。

    • 如果文件夹中没有文件,输出提示并退出程序。

  3. 遍历并处理每个 XML 文件

    • 使用 foreach 循环遍历每个文件。

    • 调用 ReadXmlFile 方法读取文件内容。

    • 调用 SendHttpRequest 方法将文件内容发送到服务器。

    • 捕获并处理可能发生的异常(如文件格式错误、读取失败、HTTP 请求失败等)。

  4. 读取 XML 文件内容

    • 使用 StreamReader 读取文件内容,并指定文件编码为 GB2312

    • 如果文件不存在,抛出 FileNotFoundException 异常。

  5. 发送 HTTP 请求

    • 使用 HttpWebRequest 创建 HTTP POST 请求。

    • 设置请求头(AppId、AppKey、Topic、Tag)。

    • 将 XML 内容写入请求体。

    • 获取服务器响应并返回响应内容。

  6. 异常处理

    • 对文件读取、XML 解析、HTTP 请求等操作进行异常捕获,确保程序健壮性。


代码运行流程

  1. 程序启动后,检查指定文件夹中是否存在 XML 文件。

  2. 如果存在文件,逐个读取文件内容并发送到服务器。

  3. 每次发送后,输出服务器的响应内容。

  4. 如果发生错误,输出错误信息并继续处理下一个文件。


注意事项

  1. 文件编码

    • 代码中假设 XML 文件的编码是 GB2312,如果文件编码不同,需要调整 StreamReader 的编码参数。

  2. HTTP 请求超时

    • 如果服务器响应较慢,可能需要设置 HttpWebRequest.Timeout 属性,避免请求长时间挂起。

  3. 异常处理

    • 代码中对常见异常进行了捕获,但可以根据实际需求进一步细化异常处理逻辑。


如果有其他问题,欢迎继续讨论!


http://www.ppmy.cn/server/157711.html

相关文章

云原生练习

1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容,不存在则创建一个文件将创建时间写入。 #!/bin/bash if [ -d "/tmp" ]; then echo "/tmp is exists" else mkdir /tmp fi if [ -f "/tmp/size.log" ]; then echo…

服务器登陆后有java变量

需求:在ssh服务器后,用户root 使用java会报错,没有这个变量,其实环境变量中已经有配置了,在/etc/profile 中有写变量及地址,通过source /etc/profile 命令也可以使环境变量加载上,但是ssh后不会…

【Rust自学】11.10. 集成测试

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.10.1. 什么是集成测试 在Rust里,集成测试完全位于被测试库的外部。集成测试…

【Linux】Linux常见指令(上)

个人主页~ 初识Linux 一、Linux基本命令1、ls指令2、pwd命令3、cd指令4、touch指令5、mkdir指令6、rmdir指令7、rm指令8、man指令9、cp指令10、mv命令 Linux是一个开源的、稳定的、安全的、灵活的操作系统,Linux下的操作都是通过指令来实现的 一、Linux基本命令 先…

Android广播和阿里云消息推送服务

一、什么是广播? 广播(Broadcast)在Android开发中是一个重要的概念,它类似于现实生活中的广播电台,通过“大喇叭”将消息传递给所有感兴趣的接收者。广播机制在Android系统中用于在不同组件之间传递信息,是…

分布式ID—雪花算法

背景 现在的服务基本是分布式、微服务形式的,而且大数据量也导致分库分表的产生,对于水平分表就需要保证表中 id 的全局唯一性。 对于 MySQL 而言,一个表中的主键 id 一般使用自增的方式,但是如果进行水平分表之后,多…

linux-磁盘io性能指标!

一. 引文: 平时查看或者监控磁盘io时,基本上都是用的现成的工具/脚本, 对其了解的还是很浅,特参考一些资料整理了下,留个随笔。 二.磁盘I/O性能指标: 磁盘 I/O 是 Unix/Linux 系统管理中一个非常重要的组成部分。磁盘…

Python的模式匹配

python的模式匹配 当我们使用if...elif...else时,面对较多条件就会出现if...elif...elif...elif...elif...elif...else会写很长的一段代码,导致我们代码的可读性变差。 即针对若干种情况我们可以使用match语句(类似于C语言的switch多分支语…