Ruanmou 后台模拟 数据发送

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.IO;
  4 using System.Net;
  5 using System.Net.Http;
  6 using System.Text;
  7 using Microsoft.VisualStudio.TestTools.UnitTesting;
  8 
  9 namespace Ruanmou.SOA.UnitTestProject
 10 {
 11     /// <summary>
 12     /// 要求HttpClient的实例化都从这里来  全局只要一个实例,不要using
 13     /// 各个请求是隔开的,可以复用链接的 
 14     /// </summary>
 15     public class HttpClientFactory
 16     {
 17         private static HttpClient _HttpClient = null;
 18         static HttpClientFactory()
 19         {
 20             _HttpClient = new HttpClient(new HttpClientHandler());
 21         }
 22         public static HttpClient GetHttpClient()
 23         {
 24             return _HttpClient;
 25         }
 26     }
 27 
 28 
 29 
 30     /// <summary>
 31     /// WebApi全部遵循的Http协议,HttpMethod
 32     /// 其实就等同于网页,可以去爬虫
 33     /// 就时后端模拟Http请求
 34     /// 
 35     /// HttpWebRequest  HttpClient
 36     /// 
 37     /// HttpClient
 38     /// using (var http = new HttpClient(handler)) 不太好 tcp其实并不能立即释放掉
 39     /// 如果高并发式的这样操作,会出现资源不够  积极拒绝
 40     /// HttpClient内部有个连接池,各个请求是隔开的,可以复用链接的 实际应该单例一下
 41     /// </summary>
 42     [TestClass]
 43     public class WebapiTest
 44     {
 45         [TestMethod]
 46         public void TestMethod()
 47         {
 48             //this.AuthorizationDemo();
 49 
 50             var result1 = this.GetClient();
 51             var result2 = this.GetWebQuest();
 52             var result3 = this.PostClient();
 53             var result4 = this.PostWebQuest();
 54             var result5 = this.PutClient();
 55             var result6 = this.PutWebQuest();
 56             var result7 = this.DeleteClient();//传值只能是url
 57             var result8 = this.DeleteWebQuest();
 58             //Console.WriteLine();
 59         }
 60 
 61         #region HttpClient Get
 62         /// <summary>
 63         /// HttpClient实现Get请求
 64         /// </summary>
 65         private string GetClient()
 66         {
 67             //string url = "http://localhost:8088/api/users/GetUserByName?username=superman";
 68             //string url = "http://localhost:8088/api/users/GetUserByID?id=1";
 69             //string url = "http://localhost:8088/api/users/GetUserByNameId?userName=Superman&id=1";
 70             //string url = "http://localhost:8088/api/users/Get";
 71             //string url = "http://localhost:8088/api/users/GetUserByModel?UserID=11&UserName=Eleven&UserEmail=57265177%40qq.com";
 72             string url = "http://localhost:8088/api/users/GetUserByModelUri?UserID=11&UserName=Eleven&UserEmail=57265177%40qq.com";
 73             //string url = "http://localhost:8088/api/users/GetUserByModelSerialize?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
 74             //string url = "http://localhost:8088/api/users/GetUserByModelSerializeWithoutGet?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
 75             //string url = "http://localhost:8088/api/users/NoGetUserByModelSerializeWithoutGet?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
 76             var handler = new HttpClientHandler();//{ AutomaticDecompression = DecompressionMethods.GZip };
 77 
 78             using (var http = new HttpClient(handler))
 79             {
 80                 var response = http.GetAsync(url).Result;//拿到异步结果
 81                 Console.WriteLine(response.StatusCode); //确保HTTP成功状态值
 82                 //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
 83                 return response.Content.ReadAsStringAsync().Result;
 84             }
 85         }
 86         #endregion
 87 
 88         #region HttpWebRequest实现Get请求
 89         /// <summary>
 90         /// HttpWebRequest实现Get请求
 91         /// </summary>
 92         private string GetWebQuest()
 93         {
 94             //string url = "http://localhost:8088/api/users/GetUserByName?username=superman";
 95             //string url = "http://localhost:8088/api/users/GetUserByID?id=1";
 96             //string url = "http://localhost:8088/api/users/GetUserByNameId?userName=Superman&id=1";
 97             //string url = "http://localhost:8088/api/users/Get";
 98             //string url = "http://localhost:8088/api/users/GetUserByModel?UserID=11&UserName=Eleven&UserEmail=57265177%40qq.com";
 99             //string url = "http://localhost:8088/api/users/GetUserByModelUri?UserID=11&UserName=Eleven&UserEmail=57265177%40qq.com";
100             string url = "http://localhost:8088/api/users/GetUserByModelSerialize?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
101             //string url = "http://localhost:8088/api/users/GetUserByModelSerializeWithoutGet?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
102             //string url = "http://localhost:8088/api/users/NoGetUserByModelSerializeWithoutGet?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
103 
104             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
105             request.Timeout = 30 * 1000;
106 
107             //request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
108             //request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
109             string result = "";
110             using (var res = request.GetResponse() as HttpWebResponse)
111             {
112                 if (res.StatusCode == HttpStatusCode.OK)
113                 {
114                     StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
115                     result = reader.ReadToEnd();
116                 }
117             }
118             return result;
119         }
120 
121         #endregion
122 
123         #region HttpClient实现Post请求
124         /// <summary>
125         /// HttpClient实现Post请求
126         /// </summary>
127         private string PostClient()
128         {
129             //string url = "http://localhost:8088/api/users/register";
130             //Dictionary<string, string> dic = new Dictionary<string, string>()
131             //{
132             //    {"","1" }
133             //};
134 
135             //string url = "http://localhost:8088/api/users/RegisterNoKey";
136             //Dictionary<string, string> dic = new Dictionary<string, string>()
137             //{
138             //    {"","1" }
139             //};
140 
141             //string url = "http://localhost:8088/api/users/RegisterUser";
142             //Dictionary<string, string> dic = new Dictionary<string, string>()
143             //{
144             //    {"UserID","11" },
145             //    {"UserName","Eleven" },
146             //    {"UserEmail","57265177@qq.com" },
147             //};
148 
149             string url = "http://localhost:8088/api/users/RegisterObject";
150             Dictionary<string, string> dic = new Dictionary<string, string>()
151             {
152                 {"User[UserID]","11" },
153                 {"User[UserName]","Eleven" },
154                 {"User[UserEmail]","57265177@qq.com" },
155                 {"Info","this is muti model" }
156             };
157 
158             HttpClientHandler handler = new HttpClientHandler();
159             using (var http = new HttpClient(handler))
160             {
161                 //使用FormUrlEncodedContent做HttpContent
162                 var content = new FormUrlEncodedContent(dic);
163                 var response = http.PostAsync(url, content).Result;
164                 Console.WriteLine(response.StatusCode); //确保HTTP成功状态值
165                 return response.Content.ReadAsStringAsync().Result;
166             }
167 
168         }
169         #endregion
170 
171         #region  HttpWebRequest实现post请求
172         /// <summary>
173         /// HttpWebRequest实现post请求
174         /// </summary>
175         private string PostWebQuest()
176         {
177             //string url = "http://localhost:8088/api/users/register";
178             //var postData = "1";
179 
180             //string url = "http://localhost:8088/api/users/RegisterNoKey";
181             //var postData = "1";
182 
183             var user = new
184             {
185                 UserID = "11",
186                 UserName = "Eleven",
187                 UserEmail = "57265177@qq.com"
188             };
189             //string url = "http://localhost:8088/api/users/RegisterUser";
190             //var postData = JsonHelper.ObjectToString(user);
191 
192             var userOther = new
193             {
194                 User = user,
195                 Info = "this is muti model"
196             };
197             string url = "http://localhost:8088/api/users/RegisterObject";
198             var postData = Newtonsoft.Json.JsonConvert.SerializeObject(userOther);
199 
200             var request = HttpWebRequest.Create(url) as HttpWebRequest;
201             request.Timeout = 30 * 1000;//设置30s的超时
202             request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
203             request.ContentType = "application/json";
204             request.Method = "POST";
205             byte[] data = Encoding.UTF8.GetBytes(postData);
206             request.ContentLength = data.Length;
207             Stream postStream = request.GetRequestStream();
208             postStream.Write(data, 0, data.Length);
209             postStream.Close();
210 
211             string result = "";
212             using (var res = request.GetResponse() as HttpWebResponse)
213             {
214                 if (res.StatusCode == HttpStatusCode.OK)
215                 {
216                     StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
217                     result = reader.ReadToEnd();
218                 }
219             }
220             return result;
221         }
222         #endregion
223 
224         #region HttpClient实现Put请求
225         /// <summary>
226         /// HttpClient实现Put请求
227         /// </summary>
228         private string PutClient()
229         {
230             string url = "http://localhost:8088/api/users/RegisterPut";
231             Dictionary<string, string> dic = new Dictionary<string, string>()
232             {
233                 {"","1" }
234             };
235 
236             //string url = "http://localhost:8088/api/users/RegisterNoKeyPut";
237             //Dictionary<string, string> dic = new Dictionary<string, string>()
238             //{
239             //    {"","1" }
240             //};
241 
242             //string url = "http://localhost:8088/api/users/RegisterUserPut";
243             //Dictionary<string, string> dic = new Dictionary<string, string>()
244             //{
245             //    {"UserID","11" },
246             //    {"UserName","Eleven" },
247             //    {"UserEmail","57265177@qq.com" },
248             //};
249 
250             //string url = "http://localhost:8088/api/users/RegisterObjectPut";
251             //Dictionary<string, string> dic = new Dictionary<string, string>()
252             //{
253             //    {"User[UserID]","11" },
254             //    {"User[UserName]","Eleven" },
255             //    {"User[UserEmail]","57265177@qq.com" },
256             //    {"Info","this is muti model" }
257             //};
258 
259             HttpClientHandler handler = new HttpClientHandler();
260             using (var http = new HttpClient(handler))
261             {
262                 //使用FormUrlEncodedContent做HttpContent
263                 var content = new FormUrlEncodedContent(dic);
264                 var response = http.PutAsync(url, content).Result;
265                 Console.WriteLine(response.StatusCode); //确保HTTP成功状态值
266                 return response.Content.ReadAsStringAsync().Result;
267             }
268 
269         }
270         #endregion
271 
272         #region  HttpWebRequest实现put请求
273         /// <summary>
274         /// HttpWebRequest实现put请求
275         /// </summary>
276         private string PutWebQuest()
277         {
278             //string url = "http://localhost:8088/api/users/registerPut";
279             //var postData = "1";
280 
281             //string url = "http://localhost:8088/api/users/RegisterNoKeyPut";
282             //var postData = "1";
283 
284             var user = new
285             {
286                 UserID = "11",
287                 UserName = "Eleven",
288                 UserEmail = "57265177@qq.com"
289             };
290             //string url = "http://localhost:8088/api/users/RegisterUserPut";
291             //var postData = JsonHelper.ObjectToString(user);
292 
293             var userOther = new
294             {
295                 User = user,
296                 Info = "this is muti model"
297             };
298             string url = "http://localhost:8088/api/users/RegisterObjectPut";
299             var postData = Newtonsoft.Json.JsonConvert.SerializeObject(userOther);
300 
301             var request = HttpWebRequest.Create(url) as HttpWebRequest;
302             request.Timeout = 30 * 1000;//设置30s的超时
303             request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
304             request.ContentType = "application/json";
305             request.Method = "PUT";
306             byte[] data = Encoding.UTF8.GetBytes(postData);
307             request.ContentLength = data.Length;
308             Stream postStream = request.GetRequestStream();
309             postStream.Write(data, 0, data.Length);
310             postStream.Close();
311 
312             string result = "";
313             using (var res = request.GetResponse() as HttpWebResponse)
314             {
315                 if (res.StatusCode == HttpStatusCode.OK)
316                 {
317                     StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
318                     result = reader.ReadToEnd();
319                 }
320             }
321             return result;
322         }
323         #endregion
324 
325         #region HttpClient实现Delete请求
326         /// <summary>
327         /// HttpClient实现Put请求
328         /// 没放入数据
329         /// </summary>
330         private string DeleteClient()
331         {
332             string url = "http://localhost:8088/api/users/RegisterDelete/1";
333             Dictionary<string, string> dic = new Dictionary<string, string>()
334             {
335                 {"","1" }
336             };
337 
338             //string url = "http://localhost:8088/api/users/RegisterNoKeyDelete";
339             //Dictionary<string, string> dic = new Dictionary<string, string>()
340             //{
341             //    {"","1" }
342             //};
343 
344             //string url = "http://localhost:8088/api/users/RegisterUserDelete";
345             //Dictionary<string, string> dic = new Dictionary<string, string>()
346             //{
347             //    {"UserID","11" },
348             //    {"UserName","Eleven" },
349             //    {"UserEmail","57265177@qq.com" },
350             //};
351 
352             //string url = "http://localhost:8088/api/users/RegisterObjectDelete";
353             //Dictionary<string, string> dic = new Dictionary<string, string>()
354             //{
355             //    {"User[UserID]","11" },
356             //    {"User[UserName]","Eleven" },
357             //    {"User[UserEmail]","57265177@qq.com" },
358             //    {"Info","this is muti model" }
359             //};
360 
361             HttpClientHandler handler = new HttpClientHandler();
362             using (var http = new HttpClient(handler))
363             {
364                 //使用FormUrlEncodedContent做HttpContent
365                 var content = new FormUrlEncodedContent(dic);
366                 var response = http.DeleteAsync(url).Result;
367                 Console.WriteLine(response.StatusCode); //确保HTTP成功状态值
368                 return response.Content.ReadAsStringAsync().Result;
369             }
370         }
371         #endregion
372 
373         #region  HttpWebRequest实现put请求
374         /// <summary>
375         /// HttpWebRequest实现put请求
376         /// </summary>
377         private string DeleteWebQuest()
378         {
379             //string url = "http://localhost:8088/api/users/registerDelete";
380             //var postData = "1";
381 
382             //string url = "http://localhost:8088/api/users/RegisterNoKeyDelete";
383             //var postData = "1";
384 
385             var user = new
386             {
387                 UserID = "11",
388                 UserName = "Eleven",
389                 UserEmail = "57265177@qq.com"
390             };
391             //string url = "http://localhost:8088/api/users/RegisterUserDelete";
392             //var postData = JsonHelper.ObjectToString(user);
393 
394             var userOther = new
395             {
396                 User = user,
397                 Info = "this is muti model"
398             };
399             string url = "http://localhost:8088/api/users/RegisterObjectDelete";
400             var postData = Newtonsoft.Json.JsonConvert.SerializeObject(userOther);
401 
402             var request = HttpWebRequest.Create(url) as HttpWebRequest;
403             request.Timeout = 30 * 1000;//设置30s的超时
404             request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
405             request.ContentType = "application/json";
406             request.Method = "Delete";
407             byte[] data = Encoding.UTF8.GetBytes(postData);
408             request.ContentLength = data.Length;
409             Stream postStream = request.GetRequestStream();
410             postStream.Write(data, 0, data.Length);
411             postStream.Close();
412 
413             string result = "";
414             using (var res = request.GetResponse() as HttpWebResponse)
415             {
416                 if (res.StatusCode == HttpStatusCode.OK)
417                 {
418                     StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
419                     result = reader.ReadToEnd();
420                 }
421             }
422             return result;
423         }
424         #endregion
425 
426 
427         #region 用户登陆 获取ticket后使用
428         private void AuthorizationDemo()
429         {
430             string ticket = "";
431             {
432                 string loginUrl = "http://localhost:8088/api/users/Login?Account=Admin&Password=123456";
433                 var handler = new HttpClientHandler();//{ AutomaticDecompression = DecompressionMethods.GZip };
434 
435                 using (var http = new HttpClient(handler))
436                 {
437                     var response = http.GetAsync(loginUrl).Result;//拿到异步结果
438                     Console.WriteLine(response.StatusCode); //确保HTTP成功状态值
439                                                             //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
440                     ticket = response.Content.ReadAsStringAsync().Result.Replace("\"{\\\"Result\\\":true,\\\"Ticket\\\":\\\"", "").Replace("\\\"}\"", "");
441                     //ticket = JsonHelper.StringToObject<TicketModel>(response.Content.ReadAsStringAsync().Result).Ticket;
442                 }
443             }
444             {
445                 string url = "http://localhost:8088/api/users/GetUserByName?username=superman";
446                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
447                 request.Timeout = 30 * 1000;
448                 request.Headers.Add(HttpRequestHeader.Authorization, "BasicAuth " + ticket);//头文件增加Authorization
449                 //request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
450                 //request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
451                 string result = "";
452                 using (var res = request.GetResponse() as HttpWebResponse)
453                 {
454                     if (res.StatusCode == HttpStatusCode.OK)
455                     {
456                         StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
457                         result = reader.ReadToEnd();
458                     }
459                 }
460             }
461             {
462                 string url = "http://localhost:8088/api/users/GetUserByName?username=superman";
463                 var handler = new HttpClientHandler();
464 
465                 using (var http = new HttpClient(handler))
466                 {
467                     http.DefaultRequestHeaders.Add("Authorization", "BasicAuth " + ticket);//头文件增加Authorization
468                     var response = http.GetAsync(url).Result;
469                     Console.WriteLine(response.StatusCode);
470                     string result = response.Content.ReadAsStringAsync().Result;
471                 }
472             }
473         }
474         #endregion
475     }
476 }

 

posted @ 2021-03-03 13:59  YZM_Leo  阅读(527)  评论(0)    收藏  举报