你的位置:首页 > ASP.net教程

[ASP.net教程]C#通过WebClient/HttpWebRequest实现http的POST/GET方法


/// <summary>///body是要传递的参数,格式"roleId=1&uid=2"///post的cotentType填写"application/x-www-form-urlencoded"///soap填写:"text//// </summary>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;  }

 1 /// <summary> 2     /// 通过WebClient类Post数据到远程地址,需要Basic认证; 3     /// 调用端自己处理异常 4     /// </summary> 5     /// <param name="uri"></param> 6     /// <param name="paramStr">name=张三&age=20</param> 7     /// <param name="encoding">请先确认目标网页的编码方式</param> 8     /// <param name="username"></param> 9     /// <param name="password"></param>10     /// <returns></returns>11     public static string Request_WebClient(string uri, string paramStr, Encoding encoding, string username, string password)12     {13       if (encoding == null)14         encoding = Encoding.UTF8;15 16       string result = string.Empty;17 18       WebClient wc = new WebClient();19 20       // 采取POST方式必须加的Header21       wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");22 23       byte[] postData = encoding.GetBytes(paramStr);24 25       if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))26       {27         wc.Credentials = GetCredentialCache(uri, username, password);28         wc.Headers.Add("Authorization", GetAuthorization(username, password));29       }30 31       byte[] responseData = wc.UploadData(uri, "POST", postData); // 得到返回字符流32       return encoding.GetString(responseData);// 解码         33     }

 1 public static string GetHttp(string url, HttpContext httpContext) 2   { 3     string queryString = "?"; 4  5     foreach (string key in httpContext.Request.QueryString.AllKeys) 6     { 7       queryString += key + "=" + httpContext.Request.QueryString[key] + "&"; 8     } 9 10     queryString = queryString.Substring(0, queryString.Length - 1);11 12     HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url + queryString);13 14     httpWebRequest.ContentType = "application/json";15     httpWebRequest.Method = "GET";16     httpWebRequest.Timeout = 20000;17 18     //byte[] btBodys = Encoding.UTF8.GetBytes(body);19     //httpWebRequest.ContentLength = btBodys.Length;20     //httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);21 22     HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();23     StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());24     string responseContent = streamReader.ReadToEnd();25 26     httpWebResponse.Close();27     streamReader.Close();28 29     return responseContent;30   }

HttpWebRequest(GET)
 1 /// <summary> 2     /// 通过 WebRequest/WebResponse 类访问远程地址并返回结果,需要Basic认证; 3     /// 调用端自己处理异常 4     /// </summary> 5     /// <param name="uri"></param> 6     /// <param name="timeout">访问超时时间,单位毫秒;如果不设置超时时间,传入0</param> 7     /// <param name="encoding">如果不知道具体的编码,传入null</param> 8     /// <param name="username"></param> 9     /// <param name="password"></param>10     /// <returns></returns>11     public static string Request_WebRequest(string uri, int timeout, Encoding encoding, string username, string password)12     {13       string result = string.Empty;14 15       WebRequest request = WebRequest.Create(new Uri(uri));16 17       if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))18       {19         request.Credentials = GetCredentialCache(uri, username, password);20         request.Headers.Add("Authorization", GetAuthorization(username, password));21       }22 23       if (timeout > 0)24         request.Timeout = timeout;25 26       WebResponse response = request.GetResponse();27       Stream stream = response.GetResponseStream();28       StreamReader sr = encoding == null ? new StreamReader(stream) : new StreamReader(stream, encoding);29 30       result = sr.ReadToEnd();31 32       sr.Close();33       stream.Close();34 35       return result;36     }37 38     #region # 生成 Http Basic 访问凭证 #39 40     private static CredentialCache GetCredentialCache(string uri, string username, string password)41     {42       string authorization = string.Format("{0}:{1}", username, password);43 44       CredentialCache credCache = new CredentialCache();45       credCache.Add(new Uri(uri), "Basic", new NetworkCredential(username, password));46 47       return credCache;48     }49 50     private static string GetAuthorization(string username, string password)51     {52       string authorization = string.Format("{0}:{1}", username, password);53 54       return "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(authorization));55     }56 57     #endregion