WithCoderWithCoderWithCoder

C#使用WebRequest/WebResponse调用HTTP接口

    今天使用C#开发串口读取程序,读取完成后需要调用PHP接口,将数据上传到服务器。之前基本没有用C# Winform调用过HTTP接口,特意上网查了一下,将实现过程记录下来,以备后续使用。

    在WebApi发布之前,是通过WebRequest/WebResponse这两个类组合来调用HTTP接口的,简单的实现如下:

    1. 封装post请求   

        /// <summary>  
        /// 指定Post地址使用Get 方式获取全部字符串  
        /// </summary>  
        /// <param name="url">请求后台地址</param>  
        /// <returns></returns>  
        public string post(string url, SortedDictionary<string, object> dic)
        {
            string result = "";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            //签名加密
            request.Headers.Add("apptype", "winform");
            //request.Headers.Add("sendtime", DateTime.);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.Accept = "*/*";
            #region 添加Post 参数
            StringBuilder builder = new StringBuilder();
            int i = 0;
            foreach (var item in dic)
            {
                if (i > 0)
                    builder.Append("&");
                builder.AppendFormat("{0}={1}", item.Key, item.Value);
                i++;
            }
            byte[] data = Encoding.UTF8.GetBytes(builder.ToString());
            request.ContentLength = data.Length;
            using (Stream reqStream = request.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();
            }
            #endregion
            HttpWebResponse resp;
            try
            {
                resp = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                resp = (HttpWebResponse)ex.Response;
            }
            Stream stream = resp.GetResponseStream();
            //获取响应内容  
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                result = reader.ReadToEnd();
            }
            return result;
        }

    2. 模拟调用接口   

        private void button_Click(object sender, EventArgs e)
        {
            string url = "http://demo.com/index.php";
            
            // 请求参数
            SortedDictionary<string, object> dic = new SortedDictionary<string, object>();
            dic.Add("name", "neil");
            dic.Add("age", 100);
            
            // 请求
            string result = "";
            try
            {
                // try/catch用于判断请求失败或断网异常处理
                result = this.post(url, dic);
            }
            catch (Exception ex)
            {
            }
        }

    注意:

    需要用try,catch在断网或请求失败的情况下,捕捉错误处理,以防程序崩溃。

欢迎分享交流,转载请注明出处:WithCoder » C#使用WebRequest/WebResponse调用HTTP接口