C#后台Http请求实现

首先我们先回温一下http请求的原理:https://www.cnblogs.com/chenliyang/p/6558756.html

在理解http协议后,后面的实现就不难理解了。

1. GET请求     

  #region GET请求
        public static T HttpGet<T>(string url)
        {
            try
            {
                string retString = "";
                //创建Request对象
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "GET";
                request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
                request.Timeout = 30000;
                request.ReadWriteTimeout = 30000;
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                   //输出响应流
                    Stream stream = response.GetResponseStream();
                    using (StreamReader streamReader = new StreamReader(stream, Encoding.UTF8))
                    {
                        retString = streamReader.ReadToEnd().ToString();
                    }
                }
                //JSON序列化
                return JsonConvert.DeserializeObject<T>(retString);
            }
            catch (Exception e)
            {
                string mse = e.Message;
                return default(T);
            }
        }

        #endregion

2. POST请求     

            (1)POST请求输入键值对参数

        #region POST请求
        /// <summary>
        /// POST请求
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="url">请求Url地址</param>
        /// <param name="postParameters">post提交参数</param>
        /// <returns></returns>
        public static T HttpPostDic<T>(string url, Dictionary<string, string> postParameters)
        {
            try
            {
                string retString = "";
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded;charset:utf-8";
                //POST参数
                StringBuilder paraStrBuilder = new StringBuilder();
                foreach (string key in postParameters.Keys)
                {
                    paraStrBuilder.AppendFormat("{0}={1}&", key, postParameters[key]);
                }
                string para = paraStrBuilder.ToString();
                if (para.EndsWith("&"))
                    para = para.Remove(para.Length - 1, 1);
                //编码要跟服务器编码统一
                byte[] bt = Encoding.UTF8.GetBytes(para);
                string responseData = String.Empty;
                request.ContentLength = bt.Length;
                //GetRequestStream输入流数据
                using (Stream reqStream = request.GetRequestStream())
                {
                    reqStream.Write(bt, 0, bt.Length);
                    reqStream.Close();
                }
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    Stream stream = response.GetResponseStream();
                    using (StreamReader streamReader = new StreamReader(stream, Encoding.UTF8))
                    {
                        retString = streamReader.ReadToEnd().ToString();
                    }
                }
                //反序列化
                return JsonConvert.DeserializeObject<T>(retString);
            }
            catch
            {
                return default(T);
            }
        }
        #endregion

(2)POST请求输入字符串参数

        #region POST请求
        /// <summary>
        /// POST请求
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="url">请求Url地址</param>
        /// <param name="postParameters">post提交参数</param>
        /// <returns></returns>
        public static T HttpPostStr<T>(string url, string js)
        {
            try
            {
                string retString = "";
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "POST";
                //注意:输入特定格式的时候头文件上下文需说明,如JSON字符串声明 
                //为:"application/json;"
                request.ContentType = "application/x-www-form-urlencoded;charset:utf-8";
                //POST参数
                //编码要跟服务器编码统一
                byte[] bt = Encoding.UTF8.GetBytes(js);
                string responseData = String.Empty;
                request.ContentLength = bt.Length;
                using (Stream reqStream = request.GetRequestStream())
                {
                    reqStream.Write(bt, 0, bt.Length);
                    reqStream.Close();
                }
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    Stream stream = response.GetResponseStream();
                    using (StreamReader streamReader = new StreamReader(stream, Encoding.UTF8))
                    {
                        retString = streamReader.ReadToEnd().ToString();
                    }
                }
                return JsonConvert.DeserializeObject<T>(retString);
            }
            catch(Exception e)
            {
                return default(T);
            }
        }
        #endregion

猜你喜欢

转载自blog.csdn.net/weixin_41278749/article/details/89533599