C#发送Http请求的类库封装及应用

作者:陆金龙    发表时间:2014-12-20 19:11   


一、C#发送Http请求的类库封装

很多时候,使用C#发送Http请求,可以给编程带来很多便利。通过以下封装的方法,可以很方便的向Aspnet中的一般处理程序、WebService、WebAPI、WCF等服务发送Http请求。可以根据需要发送Get请求或post请求,使用返回的字符串结果实现相关的功能。当然,也适用.Net工程中对PHP和Jsp服务的请求。

以下是封装好的Http请求的工具类。

public class HttpRequestHelper

    {

        /// <summary>

        /// Send Http request by get method

        /// </summary>

        /// <param name="url"></param>

        /// <returns></returns>

        public static string HttpGetRequest(string url)

        {

            string result = string.Empty;

            try

            {

                //Create a Request

                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);

                request.Method = "GET";

                request.ContentType = "text/html;charset=UTF-8";

 

                //Get a Response by Sendding HttpGetRequest

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

 

                //Create a OutStream To Accept Response Data and Convert To String

                if (response.StatusCode == HttpStatusCode.OK)

                {

                    Stream responseStream = response.GetResponseStream();

                    StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);

                    result = streamReader.ReadToEnd();

                    responseStream.Close();

                    streamReader.Close();

                }

            }

            catch (Exception ex)

            {

                result = ex.Message;

            }

            return result;

        }

   

 

        /// <summary>

        /// Send Http request by post method 

        /// </summary>

        /// <param name="url">url of ServerPage</param>

        /// <param name="strParam">format:parma1=value1¶m2=value2&parm3=value3</param>

        /// <returns>response result with string format</returns>

        public static string HttpPostRequest(string url, string strParam)

        {

            string result = string.Empty;

 

            //byte[] dataArray = Encoding.Default.GetBytes(strParam);

            byte[] dataArray = Encoding.UTF8.GetBytes(strParam);//charset to support chinese

            try

            {

                //Create a Request

                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);

                request.Method = "POST";

                request.ContentLength = dataArray.Length;

                request.ContentType = "application/x-www-form-urlencoded";//urlencode for parameters

 

                //Create a InputStream to contain params

                Stream requestStream = request.GetRequestStream();

                requestStream.Write(dataArray, 0, dataArray.Length);

                requestStream.Close();

 

                //Get a Response by Sendding HttpPostRequest

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

 

                //Create a OutputStream to Accept Response Data and Convert to String

                Stream responseStream = response.GetResponseStream();

                StreamReader stremReader = new StreamReader(responseStream, Encoding.UTF8);

                result = stremReader.ReadToEnd();

                responseStream.Close();

                stremReader.Close();

            }

            catch (Exception ex)

            {

                result = ex.Message;

            }

            return result;

        }

    }

 

二、C#发送Http请求的应用场景

2.1 请求WebService示例

 public void UpdateContactName(string id,string newName) {      

     //string ServerPage ="http://192.168.1.156/WebService/ContactService.asmx";      

     string ServerPage =WebConfig.ContactServiceUrl;//如上的地址在相关的配置项中统一维护

      try 

     {          

               string url =ServerPage + "/UpdateName";//UpdateName是ContactService中的方法,该方法中参数为 string id,string newName

              string parameters ="id="+id+"&newName="+newName;          

              string res = HttpRequestHelper.HttpPostRequest(url, parameters);      

        } 

      catch (Exception ex)       

          {                  

          }  

}

2.2 请求一般处理程序示例

    假定一个一般处理程序GetMessage.ashx提供用户消息的json数据,请求参数为userName。通过Get请求和反序列化可以得到该用户的消息。

   public List<Message> GetMessage(string userName) {

       //string ServerPage ="http://192.168.1.156/Handlers/GetMessage.ashx";

      string ServerPage =WebConfig.MessageServiceUrl;//地址在相关的配置项中统一维护

      try

      { 

          string url =ServerPage + "?userName="+userName; 

          string strJson= HttpRequestHelper.HttpGetRequest(url);

          List<Message> listMessage = new  System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<List<Message>>(json);

           return listMessage ; 

      } 

      catch (Exception ex) 

      {        

          return null;  

         } 

 }