C#中使用POST发送XML

说明:返回string中可能出现中文乱码问题

<span style="white-space: pre;">    </span>/// <summary>
        /// C#  POST 发送XML
        /// </summary>
        /// <param name="url">目标Url</param>
        /// <param name="strPost">要Post的字符串(数据)</param>
        /// <returns>服务器响应</returns>
        private string PostXml(string url, string strPost)
        {
            string result = string.Empty;
            //Our postvars
            //ASCIIEncoding.ASCII.GetBytes(string str)
            //就是把字符串str按照简体中文(ASCIIEncoding.ASCII)的编码方式,
            //编码成 Bytes类型的字节流数组;
           // 要注意的这是这个编码方式,还有内容的Xml内容的编码方式,如果没有注意对应会出现文末的错误
            byte[] buffer = Encoding.UTF8.GetBytes(strPost);
            StreamWriter myWriter = null;
            //根据url创建HttpWebRequest对象
            //Initialisation, we use localhost, change if appliable
            HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url);
            //Our method is post, otherwise the buffer (postvars) would be useless
            objRequest.Method = "POST";
            //The length of the buffer (postvars) is used as contentlength.
            //Set the content length of the string being posted.
            objRequest.ContentLength = buffer.Length;
            //We use form contentType, for the postvars.
            //Set the content type of the data being posted.
            objRequest.ContentType = "text/xml";//提交xml
            //objRequest.ContentType = "application/x-www-form-urlencoded";//提交表单
            try
            {
                //We open a stream for writing the postvars
                myWriter = new StreamWriter(objRequest.GetRequestStream());
                //Now we write, and afterwards, we close. Closing is always important!
                myWriter.Write(strPost);
            }
            catch (Exception e)
            {
                return e.Message;
            }
            finally
            {
                myWriter.Close();
            }
        //读取服务器返回信息
            //Get the response handle, we have no true response yet!
		//本文URL:http://www.bianceng.cn/Programming/csharp/201410/45576.htm
            HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
            //using作为语句,用于定义一个范围,在此范围的末尾将释放对象
            using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
            {
                //ReadToEnd适用于小文件的读取,一次性的返回整个文件
                result = sr.ReadToEnd();
                sr.Close();
            }
            return result;
        }

背景:

我发送的是encoding='UTF-8'格式的xml字符串,但一开始我使用的是

Encoding.Unicode.GetBytes(strPost)或者Default、ASCII均会提示错误。

修改字符编码格式后,成功!所以要根据发送的格式选取合适的方法。

注意:

该函数可以发送xml到用友那边,但返回信息中中文字符为乱码。

这个函数也可以实现同样的功能却避免了乱码问题

详细过程及代码如下:

1、创建httpWebRequest对象,HttpWebRequest不能直接通过new来创建,只能通过WebRequest.Create(url)的方式来获得。 WebRequest是获得一些应用层协议对象的一个统一的入口(工厂模式),它根据参数的协议来确定最终创建的对象类型。

2、初始化HttpWebRequest对象,这个过程提供一些http请求常用的标头属性:agentstring,contenttype等,其中agentstring比较有意思,它是用来识别你用的浏览器名字的,通过设置这个属性你可以欺骗服务器你是一个IE,firefox甚至是mac里面的safari。很多认真设计的网站都会根据这个值来返回对不同浏览器特别优化的代码。

3、附加要POST给服务器的数据到HttpWebRequest对象,附加POST数据的过程比较特殊,它并没有提供一个属性给用户存取,需要写入HttpWebRequest对象提供的一个stream里面。

4、读取服务器的返回信息,读取服务器返回的时候,要注意返回数据的encoding,如果我们提供的解码类型不对,会造成乱码,比较常见的是utf-8和gb2312。通常,网站会把它编码的方式放在http header里面,如果没有,我们只能通过对返回二进制值的统计方法来确定它的编码方式。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索服务器
, string
, 对象
, 编码
, httpwebrequest
方式
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-08-02 20:25:32

C#中使用POST发送XML的相关文章

C# POST 发送XML(返回string中可能出现中文乱码问题)

/// <summary> /// C# POST 发送XML /// </summary> /// <param name="url">目标Url</param> /// <param name="strPost">要Post的字符串(数据)</param> /// <returns>服务器响应</returns> private string PostXml(stri

Python中使用ElementTree解析XML示例

  这篇文章主要介绍了Python中使用ElementTree解析XML示例,本文同时讲解了XML基本概念介绍.XML几种解析方法和ElementTree解析实例,需要的朋友可以参考下 [XML基本概念介绍] XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. 概念一: 代码如下: # foo元素的起始标签 # foo元素的结束标签 # note: 每一个起始标签必须有对应的结束标签来闭合, 也可以写成 概念二: 代码如下: #

Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化

原文:Asp.Net Web API 2第十三课--ASP.NET Web API中的JSON和XML序列化 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文描述ASP.NET Web API中的JSON和XML格式化器. 在ASP.NET Web API中,媒体类型格式化器(Media-type Formatter)是一种能够做以下工作的对象: 从HTTP消息体读取

【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化

原文:[ASP.NET Web API教程]6.2 ASP.NET Web API中的JSON和XML序列化 谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予"推荐".但前几天有人询问为何很久没有更新,这让我感觉把这文章翻译出来还是有价值的.为此,本人打算将此工作继续下去.这些关于Web API的技术文章均由微软专业人员撰写,虽然文章作为博客帖子而写得比较简单

HTTP请求发送XML数据

HTTP请求发送XML数据       http请求发送一些简单的数据,大家应该知道,直接在url后加"?参数名=参数值&参数名=参数值&",但是数据过多,这样发送就不可以,不管post还是get数据量超过2m好像都不行.当数据量大的时候可以采用xml格式,发送,此时发送方法就要改一下,不能在url地址后面加参数了,这是要用到                   var Http  =   new  ActiveXObject( " Microsoft.XML

mina的编码和解码以及断包的处理,发送自定义协议,仿qq聊天,发送xml或json

最近一段时间以来,mina很火,和移动开发一样,异常的火爆.前面写了几篇移动开发的文章,都还不错,你们的鼓励就是我最大的动力.好了,废话少说.我们来看下tcp通讯吧. tcp通讯对于java来说是很简单的.就是socket,也就是大家常说的套接字.大家不要把它看的很难.说白了tcp通讯其实就是数据流的读写.一条输入流,一条输出流.分别复杂发消息和接收消息. 明白了这些,ok,我们来看看我写的例子吧.先看服务器端的测试类的源码: package com.minaqq.test; import co

利用 Amazon Web Services 集成企业应用程序--使用 Amazon SQS 发送 XML 消息

探索如何利用 XML 和 Amazon Web Services 集成企业应用程序,以及使用Microsoft® .NET (C#) 和 Java 平台构建跨平台应用程序集成功能. 队列 是用于存储等待处理的消息的临时数据结构.Amazon Simple Queue Services (Amazon SQS) 是一个支持 Web 服务的高可用性可伸缩消息队列.Amazon SQS 的主要益处包括: 基于云的解决方案.由 Amazon 管理,不需使用私有基础设施,也不需要专业支持知识. 基于 In

Win10 应用开发中Toast通知的XML文档结构教程

在以前8.1时候的Toast通知方式,到了Win 10中依然支持,而且UWP API中也包括了对应的API协定.所以,你仍然可以使用8.1的通知方式,即通过ToastNotificationManager.GetTemplateContent(ToastTemplateType)方法来获取对应的通知模板,然后用XmlDocument对象来加载和修改XML,当然你也可以直接构造XML文档,然后用XmlDocument对象来加载. 还有就是操作中心,其实它和Toast是一伙的,即我们不需要用专门的A

php以post形式发送xml的方法

这篇文章主要介绍了php以post形式发送xml的方法,包括了curl与fsockopen两种方法,具有不错的参考价值,需要的朋友可以参考下 本文实例讲述了php以post形式发送xml的方法.分享给大家供大家参考.具体方法如下: 方法一,使用curl: 复制代码 代码如下: $xml_data = ..."; $url = 'http://www.xxxx.com'; $header[] = "Content-type: text/xml";//定义content-type