C#通过WebClient/HttpWebRequest实现http的post/get方法 – 玢棂 – 博客园

本人就是参考这篇文章里的代码改进自己的项目。

 

 

 

复制代码
<span style="color: #008080;"> 1</span> <span style="color: #008000;">//</span><span style="color: #008000;">body是要传递的参数,格式"roleId=1&amp;uid=2"</span>

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 }

复制代码

复制代码
<span style="color: #008080;"> 1</span>         <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;summary&gt;</span>

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 }

复制代码

复制代码
<span style="color: #008080;"> 1</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">string</span> GetHttp(<span style="color: #0000ff;">string</span><span style="color: #000000;"> url, HttpContext httpContext)</span>

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 }

复制代码

复制代码
<span style="color: #008080;"> 1</span>         <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;summary&gt;</span>

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

复制代码

 

来源URL:http://www.cnblogs.com/shadowtale/p/3372735.html