调用接口Post xml和json数据的通用方法

其实调用接口post数据的方法都差不多,区别无非就是格式不一样,编码不一样

过程大致如下:

1.设置HttpWebRequest请求,封装头部和编码格式

2.将提交的内容转换为byte字节,写入到请求流里面

3.发送POST数据请求服务器

4.接收服务器返回信息,从返回的响应流里面读出结果

XML提交方法:输入的参数需要先转换为xml格式的字符串

/// <summary>
        /// 接口调用方法,XML格式
        /// </summary>
        /// <param name="url">接口地址</param>
        /// <param name="param">参数xml格式的字符串</param>
        /// <returns></returns>
        public static string WebRequestPost(string url, string param)
        {
            string strResult = "";
            HttpWebRequest request = null;
            HttpWebResponse response = null;
            Stream stream = null;
            StreamReader reader = null;
            try
            {
                request = (HttpWebRequest)WebRequest.Create(new Uri(url));
                request.ServicePoint.Expect100Continue = false;
                request.Method = "POST";
                request.KeepAlive = true;
                request.Timeout = 100 * 1000;
                request.ContentType = "text/xml";

                //把数组转换成流中所需字节数组类型
                byte[] bytes = Encoding.UTF8.GetBytes(param);
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(bytes, 0, bytes.Length);
                requestStream.Close();//释放

                //发送POST数据请求服务器
                response = (HttpWebResponse)request.GetResponse();
                Encoding encoding = Encoding.UTF8;
                if (!string.IsNullOrEmpty(response.CharacterSet))
                {
                    encoding = Encoding.GetEncoding(response.CharacterSet);
                }

                //获取服务器返回信息
                stream = response.GetResponseStream();
                reader = new StreamReader(stream, encoding);
                strResult = reader.ReadToEnd();
            }
            catch (WebException we)
            {
                using (var stream1 = we.Response.GetResponseStream())
                using (var reader1 = new StreamReader(stream1))
                {
                    var data = reader1.ReadToEnd();
                    throw new Exception(data);
                }
            }
            finally
            {
                if (reader != null) reader.Close();
                if (stream != null) stream.Close();
                if (response != null) response.Close();
            }
            return strResult;
        }

JSON提交方法:输入的参数需要先转换为json格式字符串

/// <summary>
        /// 接口调用方法,JSON格式
        /// </summary>
        /// <param name="url"></param>
        /// <param name="jsonData">参数是{"key1": value1, "key2": value2}格式的json数据</param>
        /// <returns></returns>
        public static string PostData(string url, string jsonData)
        {
            string result = "";
            HttpWebRequest request = null;
            HttpWebResponse response = null;

            try
            {
                request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "POST";
                request.Timeout = 100 * 1000;//设置请求超时时间,单位为毫秒
                request.ContentType = "application/json";
                //request.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
                byte[] data = Encoding.UTF8.GetBytes(jsonData);
                request.ContentLength = data.Length;
                using (Stream reqStream = request.GetRequestStream())
                {
                    reqStream.Write(data, 0, data.Length);
                    reqStream.Close();
                }

                response = (HttpWebResponse)request.GetResponse();
                Stream stream = response.GetResponseStream();
                //获取响应内容
                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                {
                    result = reader.ReadToEnd();
                }
            }
            catch (WebException we)
            {
                using (var stream1 = we.Response.GetResponseStream())
                using (var reader1 = new StreamReader(stream1))
                {
                    var data = reader1.ReadToEnd();
                    throw new Exception(data);
                }
            }
            finally
            {
                if (response != null) response.Close();
            }
            return result;
        }
原文地址:https://www.cnblogs.com/zfylzl/p/9778301.html