作者:路很长别太狂_297 | 来源:互联网 | 2023-09-14 10:59
1body是要传递的参数,格式roleId1&uid22post的cotentType填写:3applicationx-www-form-urlencoded4soap填写
一 HttpWebReques
1,HttpWebRequest是个抽象类,所以无法new的,需要调用HttpWebRequest.Create();
2,其Method指定了请求类型,这里用的GET,还有POST;也可以指定ConentType;
3,其请求的Uri必须是绝对地址;
4,其请求是异步回调方式的,从BeginGetResponse开始,并通过AsyncCallback指定回调方法;
二 WebClient
1,WebClient 方式使用基于事件的异步编程模型,在HTTP响应返回时引发的WebClient回调是在UI线程中调用的,因此可用于更新UI元素的属性,
例如把 HTTP响应中的数据绑定到UI的指定控件上进行显示。HttpWebRequest是基于后台进程运行的,回调不是UI线程,所以不能直接对UI进行操作,通常使用Dispatcher.BeginInvoke()跟界面进行通讯。
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 }
28
29 POST方法(httpWebRequest)
POST方法(httpWebRequest)
1 ///
2 /// 通过WebClient类Post数据到远程地址,需要Basic认证;
3 /// 调用端自己处理异常
4 ///
5 ///
6 /// name=张三&age=20
7 /// 请先确认目标网页的编码方式
8 ///
9 ///
10 ///
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 }
34
35 POST方法(WebClient)
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 }
31
32 Get方法(HttpWebRequest)
Get方法(HttpWebRequest)
1 ///
2 /// 通过 WebRequest/WebResponse 类访问远程地址并返回结果,需要Basic认证;
3 /// 调用端自己处理异常
4 ///
5 ///
6 /// 访问超时时间,单位毫秒;如果不设置超时时间,传入0
7 /// 如果不知道具体的编码,传入null
8 ///
9 ///
10 ///
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
58
59 basic验证的WebRequest/WebResponse
basic验证的WebRequest/WebResponse
C# HttpWebRequest和WebClient的区别 通过WebClient/HttpWebRequest实现http的post/get方法