首页 > 代码库 > 实现http的post和get的几种方法
实现http的post和get的几种方法
</pre></p><p></p><pre class="csharp" name="code"><strong><span style="color:#ff0000;">1.POST方法(httpWebRequest)</span></strong>
#region POST方法(httpWebRequest) //body是要传递的参数,格式"roleId=1&uid=2" //post的cotentType填写: //"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; } #endregion
</pre></p><p></p><pre class="csharp" name="code"><strong><span style="color:#ff0000;">2.POST方法(WebClient)</span></strong>
/// <summary> /// 通过WebClient类Post数据到远程地址,需要Basic认证; /// 调用端自己处理异常 /// </summary> /// <param name="uri"></param> /// <param name="paramStr">name=张三&age=20</param> /// <param name="encoding">请先确认目标网页的编码方式</param> /// <param name="username"></param> /// <param name="password"></param> /// <returns></returns> 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 = http://www.mamicode.com/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 = http://www.mamicode.com/wc.UploadData(uri, "POST", postData); // 得到返回字符流></pre></p><p></p><pre class="csharp" name="code"><strong><span style="color:#ff0000;">3.Get方法(HttpWebRequest)</span></strong>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; }</pre></p><p></p><pre class="csharp" name="code"><strong><span style="color:#ff0000;">4.basic验证的WebRequest/WebResponse</span></strong>/// <summary> /// 通过 WebRequest/WebResponse 类访问远程地址并返回结果,需要Basic认证; /// 调用端自己处理异常 /// </summary> /// <param name="uri"></param> /// <param name="timeout">访问超时时间,单位毫秒;如果不设置超时时间,传入0</param> /// <param name="encoding">如果不知道具体的编码,传入null</param> /// <param name="username"></param> /// <param name="password"></param> /// <returns></returns> 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实现http的post和get的几种方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。