C#发送Http请求的类库封装及应用
一、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;
}
}