C# 发送请求获得响应

两种封装方法:

View Code
#region 发送Http请求,获取返回结果
/// <summary>
/// 发送http请求,获取响应( Send HttpRequest and Get HttpResponse)
/// </summary>
/// <param name="RequestUrl">请求地址</param>
/// <param name="Params">http请求参数</param>
/// <returns>响应内容</returns>
private string SendRequestGetResponse(string RequestUrl, string Params)
{
HttpWebRequest HWRequest = null;
string NewUrl = string.Empty;
string RetCode = string.Empty;

try
{
HWRequest = (HttpWebRequest)WebRequest.Create(RequestUrl);
HWRequest.KeepAlive = true;
HWRequest.Timeout = 30000;
HWRequest.Method = "POST";
HWRequest.ContentType = "application/x-www-form-urlencoded";

HttpWebResponse HWResponse = null;
byte[] reqParams = System.Text.Encoding.ASCII.GetBytes(Params);
Stream st = HWRequest.GetRequestStream();
st.Write(reqParams, 0, reqParams.Length);
st.Flush();
st.Close();

HWResponse = (HttpWebResponse)HWRequest.GetResponse();
Stream ResSt = HWResponse.GetResponseStream();
StreamReader sr = new StreamReader(ResSt, System.Text.Encoding.UTF8);
RetCode = sr.ReadToEnd();
ResSt.Close();
ResSt.Close();
HWResponse.Close();
ResSt.Dispose();
sr.Dispose();
st.Dispose();
}
catch
{
RetCode = string.Empty;
}

return RetCode;
}
#endregion


#region 发送HTTP请求,获得响应
/// <summary>
/// 发送请求返回字符串
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="para">请求字符串</param>
/// <param name="method">请求方式GET或POST</param>
/// <returns></returns>
private string SendRequestBackStr(string url, string para, string method)
{
string strResult = "";
if (url == null || url == "")
return null;
if (method == null || method == "")
method = "GET";
#region GET方式
if (method.ToUpper() == "GET")
{
try
{
HttpWebRequest wrq = (HttpWebRequest)WebRequest.Create(url + para);
wrq.AllowAutoRedirect = false;
HttpWebResponse wrp = (HttpWebResponse)wrq.GetResponse();
if (((int)wrp.StatusCode) == 302)
{
url = wrp.Headers["Location"];
if (url.IndexOf("?") < 0)
{
para = "&" + para.Substring(1, para.Length - 1);
}
wrq = (HttpWebRequest)WebRequest.Create(url + para);
}
System.IO.StreamReader sr = new System.IO.StreamReader(wrp.GetResponseStream(), System.Text.Encoding.GetEncoding("GB2312"));

strResult = sr.ReadToEnd();
}
catch (Exception ex)
{
return ex.Message;
}
}
#endregion
#region POST方式
if (method.ToUpper() == "POST")
{
if (para.Length > 0 && para.IndexOf('?') == 0)
{
para = para.Substring(1);
}

WebRequest req = WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
StringBuilder UrlEncoded = new StringBuilder();
Char[] reserved = { '?', '=', '&' };
byte[] SomeBytes = null;
if (para != null)
{
int i = 0, j;
while (i < para.Length)
{
j = para.IndexOfAny(reserved, i);
if (j == -1)
{
UrlEncoded.Append(HttpUtility.UrlEncode(para.Substring(i, para.Length - i), System.Text.Encoding.GetEncoding("GB2312")));
break;
}
UrlEncoded.Append(HttpUtility.UrlEncode(para.Substring(i, j - i), System.Text.Encoding.GetEncoding("GB2312")));
UrlEncoded.Append(para.Substring(j, 1));
i = j + 1;
}
SomeBytes = Encoding.Default.GetBytes(UrlEncoded.ToString());
req.ContentLength = SomeBytes.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(SomeBytes, 0, SomeBytes.Length);
newStream.Close();
}
else
{
req.ContentLength = 0;
}
try
{
WebResponse result = req.GetResponse();
Stream ReceiveStream = result.GetResponseStream();

Byte[] read = new Byte[512];
int bytes = ReceiveStream.Read(read, 0, 512);

while (bytes > 0)
{
// 注意:
// 下面假定响应使用 UTF-8 作为编码方式。
// 如果内容以 ANSI 代码页形式(例如,932)发送,则使用类似下面的语句:
// Encoding encode = System.Text.Encoding.GetEncoding("shift-jis");
Encoding encode = System.Text.Encoding.GetEncoding("GB2312");
strResult += encode.GetString(read, 0, bytes);
bytes = ReceiveStream.Read(read, 0, 512);
}

return strResult;
}
catch (Exception ex)
{
return ex.Message;
}
}
#endregion
return strResult;
}
#endregion

第一种考虑到请求方式Method,get 或者 Post,第二段代码可根据情况删减。post时需要用stream流传递请求参数,get则不需要。

posted on 2012-03-22 17:18  未来证明现在  阅读(865)  评论(0编辑  收藏  举报

导航