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 地址";

            // 你的 AppId
            string appId = "你的 AppId";

            // 你的 AppKey
            string appKey = "你的 AppKey";

            // Topic 名称
            string topic = "Topic 名称";

            // 消息 Tag
            string 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);

            // 设置请求方法为 POST
            request.Method = "POST";

            // 设置请求内容类型为 XML
            request.ContentType = "application/xml";

            // 添加请求头
            request.Headers.Add("X-HW-ID", appId);       // AppId
            request.Headers.Add("X-HW-APPKEY", appKey);  // AppKey
            request.Headers.Add("MsgTopic", topic);      // Topic
            request.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. 异常处理

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/951704.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity Burst详解

【简介】 Burst是Unity的编译优化技术,优化了从C#代码编译成Native代码的过程,经过编译优化后代码有更高的运行效率。 在Unity中使用Burst很简单,在方法或类前加上[BurstCompile]特性即可。在构建时编译代码的步骤,Burst编译器会…

Linux文件系统的安全保障---Overlayroot!

overlayroot 是一种使用 OverlayFS 实现的功能,可将根文件系统挂载为只读,并通过一个临时的写层实现对文件系统的修改。这种方法非常适合嵌入式设备或需要保持系统文件完整性和安全性的场景。下文以 RK3568 平台为例,介绍制作 overlayroot 的…

Http请求响应——请求

Http概述 Http协议(HyperText Transfer Protocol,超文本传输协议),是一种用于传输网页数据的协议,规定了浏览器和服务器之间进行数据传输的规则,简单说来就是客户端与服务器端数据交互的数据格式。 客户端…

2025域名出售交易平台PHP源码

源码介绍 2025域名出售交易平台PHP源码,搭建即可正常使用,后台功能测试正常,前台测试正常,无需到处找教程或修复,教程一次性到位 搭建教程 PHP必须是5.6的 导入数据库 数据库配置文件 config/config.php 后台 http://域名/ymadmin 用户&am…

Microsoft Azure Cosmos DB:全球分布式、多模型数据库服务

目录 前言1. Azure Cosmos DB 简介1.1 什么是 Azure Cosmos DB?1.2 核心技术特点 2. 数据模型与 API 支持2.1 文档存储(Document Store)2.2 图数据库(Graph DBMS)2.3 键值存储(Key-Value Store)…

后端技术选型 sa-token校验学习 上 登录校验复习

sa-token 的官网 Sa-Token 复习 首先我们要明确一下 cookie 是什么 登录校验 Sa-Token 官方文档里面的 对于一些登录之后才能访问的接口(例如:查询我的账号资料),我们通常的做法是增加一层接口校验: 如果校验通过…

【教程】Unity 本地化多语种 | Localization 工具组

开发平台:Unity 6.0 编程平台:Visual Studio 2022 编程语言:CSharp 6.0 工具包类:Localization   一、前言 本地化多语言类型是软件面向国际化所必须的功能项。Unity 在 2022 版本后推出 Localization 工具包,以降低…

matlab编写分段Hermite插值多项式

文章目录 原理使用分段Hermite插值多项式原因公式第一类的两个插值积函数第二类的两个插值积函数 例题法一法二 代码分段 Hermite 插值的思路:分段 Hermite 插值多项式的构造:MATLAB 实现代码:结果如图:注归一化变量的作用&#x…

Elasticsearch:优化的标量量化 - 更好的二进制量化

作者:来自 Elastic Benjamin Trent 在这里,我们解释了 Elasticsearch 中的优化标量量化以及如何使用它来改进更好的二进制量化 (Better Binary Quantization - BBQ)。 我们的全新改进版二进制量化 (Better Binary Quantization - BBQ) 索引现在变得更强大…

【数据库】六、数据库设计

文章目录 六、数据库设计1 数据库设计步骤1.1 规划阶段1.2 需求分析1.3 概念设计阶段(重点)1.4 逻辑设计阶段(重点)1.5 物理设计阶段1.6 数据库的实现1.7 数据库运行与维护 2 概念模型设计2.1 ER模型2.1.1 ER模型的基本元素2.1.2 联系的设计2.1.3 采用ER模型的概念设计2.1.4 ER…

onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制

文章目录 1. 页面跳转方式2. 你的场景分析3. 页面生命周期4. 总结5. 建议 在微信小程序中,页面跳转时, onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制。以下是详细说明: 1. 页面跳转方式 微信小程序提供了多种页面…

51c~Pytorch~合集4

我自己的原文哦~ https://blog.51cto.com/whaosoft/12311033 一、Pytorch~训练-使用 这里介绍了Pytorch中已经训练好的模型如何使用 Pytorch中提供了很多已经在ImageNet数据集上训练好的模型了,可以直接被加载到模型中进行预测任务。预训练模型存放在Pytorch的…

深度学习的原理和应用

一、深度学习的原理 深度学习是机器学习领域的一个重要分支,其原理基于多层神经网络结构和优化算法。以下是深度学习的核心原理: 多层神经网络结构:深度学习模型通常由多层神经元组成,这些神经元通过权重和偏置相互连接。输入数据…

基于人工智能的公司logo设计生成方法

随着科技的飞速发展,人工智能(AI)已经深入到我们生活的方方面面。其中,基于AI的公司logo设计生成方法,不仅为品牌形象的塑造提供了新的思路,也为企业带来了前所未有的设计体验。本文将详细探讨这一新兴的、…

BO-CNN-BiLSTM-Multihead-Attention,贝叶斯优化CNN-BiLSTM融合多头注意力机制多变量回归预测

BO-CNN-BiLSTM-Multihead-Attention,贝叶斯优化CNN-BiLSTM融合多头注意力机制多变量回归预测 目录 BO-CNN-BiLSTM-Multihead-Attention,贝叶斯优化CNN-BiLSTM融合多头注意力机制多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Ma…

WPF系列九:图形控件EllipseGeometry

简介 EllipseGeometry用于绘制一个椭圆的形状。它通常与其他图形元素结合使用,比如 Path 或者作为剪切区域来定义其他元素的外形。 定义椭圆:EllipseGeometry 用来定义一个椭圆或者圆的几何形状。参与绘制:可以被用作 Path 元素的数据&…

ue5动画重定向,一键重定向。ue4小白人替换成ue5

这就是我们下载的 初学者动画内容包 点击设置选中列 绿色的是动画 黄色的关卡 蓝色是蓝图 ctrla 全选 ctrl鼠标左键 选中所有动画 重定向动画资产 不要选错,只要绿色 选择目标网格体 选择所有的绿色 动画 导出动画 添加前缀ycn 导出 一定要提前新建好存放的…

服务器漏洞修复解决方案

漏洞1、远程桌面授权服务启用检测【原理扫描】 Windows Remote Desktop Licensing Service is running: Get Server version: 0x60000604 1、解决方案:建议禁用相关服务避免目标被利用 方法一:使用服务管理器 打开“运行”对话框(WinR&am…

uniapp 微信小程序内嵌h5实时通信

描述: 小程序webview内嵌的h5需要向小程序实时发送消息,有人说postMessage可以实现,所以试验一下,结果是实现不了实时,只能在特定时机后退、组件销毁、分享时小程序才能接收到信息(小程序为了安全等考虑做了…

案例解读 | 香港某多元化综合金融企业基础监控+网管平台建设实践

PART01 项目背景 01客户简介案例客户是一家创立20多年的香港某多元化综合金融企业,其业务范围涵盖证券、期货、资产管理、财富管理等,凭借广泛的业务网络和多元化的金融服务产品,在市场中拥有显著的影响力。02痛点分析随着业务版图的持续拓展…