C#通过WebClient,HttpWebRequest实现http的post和get方法

发布时间:2015-05-22 15:51:44   来源:文档文库   
字号:

//body是要传递的参数,格式"roleId=1&uid=2"

//postcotentType填写:

//"application/x-www-form-urlencoded"

//soap填写:"text/xml; charset=utf-8"

public static string PostHttp(string url, string body, string contentType)

{

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);

httpWebRequest.ContentType = contentType;

httpWebRequest.Method = "POST";

httpWebRequest.Timeout = 20000;

byte[] btBodys = Encoding.UTF8.GetBytes(body);

httpWebRequest.ContentLength = btBodys.Length;

httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);

HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();

StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());

string responseContent = streamReader.ReadToEnd();

httpWebResponse.Close();

streamReader.Close();

httpWebRequest.Abort();

httpWebResponse.Close();

return responseContent;

}

POST方法(httpWebRequest)

///

/// 通过WebClientPost数据到远程地址,需要Basic认证;

/// 调用端自己处理异常

///

///

/// name=张三&age=20

/// 请先确认目标网页的编码方式

///

///

///

public static string Request_WebClient(string uri, string paramStr, Encoding encoding, string username, string password)

{

if (encoding == null)

encoding = Encoding.UTF8;

string result = string.Empty;

WebClient wc = new WebClient();

// 采取POST方式必须加的Header

wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

byte[] postData = encoding.GetBytes(paramStr);

if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))

{

wc.Credentials = GetCredentialCache(uri, username, password);

wc.Headers.Add("Authorization", GetAuthorization(username, password));

}

byte[] responseData = wc.UploadData(uri, "POST", postData); // 得到返回字符流

return encoding.GetString(responseData);// 解码

}

POST方法(WebClient)

public static string GetHttp(string url, HttpContext httpContext)

{

string queryString = "?";

foreach (string key in httpContext.Request.QueryString.AllKeys)

{

queryString += key + "=" + httpContext.Request.QueryString[key] + "&";

}

queryString = queryString.Substring(0, queryString.Length - 1);

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url + queryString);

httpWebRequest.ContentType = "application/json";

httpWebRequest.Method = "GET";

httpWebRequest.Timeout = 20000;

//byte[] btBodys = Encoding.UTF8.GetBytes(body);

//httpWebRequest.ContentLength = btBodys.Length;

//httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);

HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();

StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());

string responseContent = streamReader.ReadToEnd();

httpWebResponse.Close();

streamReader.Close();

return responseContent;

}

Get方法(HttpWebRequest)

///

/// 通过 WebRequest/WebResponse 类访问远程地址并返回结果,需要Basic认证;

/// 调用端自己处理异常

///

///

/// 访问超时时间,单位毫秒;如果不设置超时时间,传入0

/// 如果不知道具体的编码,传入null

///

///

///

public static string Request_WebRequest(string uri, int timeout, Encoding encoding, string username, string password)

{

string result = string.Empty;

WebRequest request = WebRequest.Create(new Uri(uri));

if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))

{

request.Credentials = GetCredentialCache(uri, username, password);

request.Headers.Add("Authorization", GetAuthorization(username, password));

}

if (timeout > 0)

request.Timeout = timeout;

WebResponse response = request.GetResponse();

Stream stream = response.GetResponseStream();

StreamReader sr = encoding == null ? new StreamReader(stream) : new StreamReader(stream, encoding);

result = sr.ReadToEnd();

sr.Close();

stream.Close();

return result;

}

#region # 生成 Http Basic 访问凭证 #

private static CredentialCache GetCredentialCache(string uri, string username, string password)

{

string authorization = string.Format("{0}:{1}", username, password);

CredentialCache credCache = new CredentialCache();

credCache.Add(new Uri(uri), "Basic", new NetworkCredential(username, password));

return credCache;

}

private static string GetAuthorization(string username, string password)

{

string authorization = string.Format("{0}:{1}", username, password);

return "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(authorization));

}

#endregion

basic验证的WebRequest/WebResponse

本文来源:https://www.2haoxitong.net/k/doc/54d76d8103d8ce2f006623e4.html

《C#通过WebClient,HttpWebRequest实现http的post和get方法.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式