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

Posted 玢棂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#通过WebClient/HttpWebRequest实现http的post/get方法相关的知识,希望对你有一定的参考价值。

 1 //body是要传递的参数,格式"roleId=1&uid=2"
 2 //post的cotentType填写:
 3 //"application/x-www-form-urlencoded"
 4 //soap填写:"text/xml; charset=utf-8"
 5     public static string PostHttp(string url, string body, string contentType)
 6     {
 7         HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
 8 
 9         httpWebRequest.ContentType = contentType;
10         httpWebRequest.Method = "POST";
11         httpWebRequest.Timeout = 20000;
12 
13         byte[] btBodys = Encoding.UTF8.GetBytes(body);
14         httpWebRequest.ContentLength = btBodys.Length;
15         httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);
16 
17         HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
18         StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
19         string responseContent = streamReader.ReadToEnd();
20 
21         httpWebResponse.Close();
22         streamReader.Close();
23         httpWebRequest.Abort();
24         httpWebResponse.Close();
25 
26         return responseContent;
27     }
POST方法(httpWebRequest)
 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方式必须加的Header
21             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         }
POST方法(WebClient)
 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     }
Get方法(HttpWebRequest)
 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
basic验证的WebRequest/WebResponse

 

以上是关于C#通过WebClient/HttpWebRequest实现http的post/get方法的主要内容,如果未能解决你的问题,请参考以下文章

通过 C# 对 C 程序的多个输入

如何通过 IntPtr 将 c++ 数组编组为 c#

通过 C# 通过 Outlook 2010 发送电子邮件

如何通过 C# 应用程序在文件级别授予 Windows 权限?

通过 C# 发送 Gmail [重复]

C# WebApi 通过 body 从 C# MVC 接收 json