HTTP模拟工具

开发语言:C#/Winform
开发工具:Visual Studio 2017
数据库:   SQLite
使用框架:界面-MetroModernUI
              Http请求-RestSharp
              ORM-Dapper.Net
              Json解析-Newtonsoft.Json
              多线程-SmartThreadPool
本来打算试一下Dapper.Net扩展框架-DapperExtensions,用了有点问题,不知什么原因后来弃用了,用回原生的Dapper.Net。
相关程序包被我删了,NuGet管理器自行还原。

项目地址:在文章最底部

来!上图!!
Get请求方式

Post请求方式

Http请求的核心代码

  1. /// <summary>
  2. /// 请求
  3. /// </summary>
  4. /// <param name="url"></param>
  5. /// <param name="jsonData"></param>
  6. /// <param name="methodType"></param>
  7. /// <returns></returns>
  8. private string RequestData(string url, Dictionary<string, string> headerData, string jsonData, Method methodType)
  9. {
  10. string urlHead = "";
  11. string urlTail = "";
  12. )
  13. {
  14. urlHead = "http://";
  15. urlTail = url.Substring("http://".Length);
  16. }
  17. )
  18. {
  19. urlHead = "https://";
  20. urlTail = url.Substring("https://".Length);
  21. }
  22. else
  23. {
  24. urlHead = "http://";
  25. urlTail = url;
  26. }
  27.  
  28. ]);
  29. ]) + urlTail.Split(].Length + ), methodType);
  30. if (methodType == Method.POST)
  31. request.AddParameter("application/json;charset=utf-8", jsonData, ParameterType.RequestBody);
  32.  
  33. foreach (var item in headerData)
  34. {
  35. request.AddHeader(item.Key, item.Value);
  36. }
  37.  
  38. // execute the request
  39. IRestResponse response = client.Execute(request);
  40. var content = response.Content; // raw content as string
  41.  
  42. return content.ToString();
  43. }

Json数据绑定TreeView控件核心代码

  1. /// <summary>
  2. /// 绑定树形控件
  3. /// </summary>
  4. /// <param name="treeView"></param>
  5. /// <param name="strJson"></param>
  6. private void BindTreeView(TreeView treeView, string strJson)
  7. {
  8. treeView.Nodes.Clear();
  9.  
  10. //string strJson = "1";//抛异常
  11. //string strJson = "{}";
  12. //string strJson = "{\"errcode\":0,\"errmsg\":\"查询成功\",\"datas\":[{\"c_ResourceType\":\"BootLogo\",\"c_Url\":\"/Upload/Magazine/4e09315d-7d92-4e6a-984d-80f684a24da8.jpg\"}]}";
  13. //string strJson = "[{\"DeviceCode\":\"430BE-B3C6A-4E953-9F972-FC741\",\"RoomNum\":\"777\"},{\"DeviceCode\":\"BF79F -09807-EEA31-2499E-31A98\",\"RoomNum\":\"888\"}]";
  14.  
  15. if (IsJOjbect(strJson))
  16. {
  17. JObject jo = (JObject)JsonConvert.DeserializeObject(strJson);
  18.  
  19. foreach (var item in jo)
  20. {
  21. TreeNode tree;
  22. if (item.Value.GetType() == typeof(JObject))
  23. {
  24. tree = new TreeNode(item.Key);
  25. AddTreeChildNode(ref tree, item.Value.ToString());
  26. treeView.Nodes.Add(tree);
  27. }
  28. else if (item.Value.GetType() == typeof(JArray))
  29. {
  30. tree = new TreeNode(item.Key);
  31. AddTreeChildNode(ref tree, item.Value.ToString());
  32. treeView.Nodes.Add(tree);
  33. }
  34. else
  35. {
  36. tree = new TreeNode(item.Key + ":" + item.Value.ToString());
  37. treeView.Nodes.Add(tree);
  38. }
  39. }
  40. }
  41. if (IsJArray(strJson))
  42. {
  43. JArray ja = (JArray)JsonConvert.DeserializeObject(strJson);
  44. ;
  45. foreach (JObject item in ja)
  46. {
  47. TreeNode tree = new TreeNode("Array [" + (i++) + "]");
  48. foreach (var itemOb in item)
  49. {
  50. TreeNode treeOb;
  51. if (itemOb.Value.GetType() == typeof(JObject))
  52. {
  53. treeOb = new TreeNode(itemOb.Key);
  54. AddTreeChildNode(ref treeOb, itemOb.Value.ToString());
  55. tree.Nodes.Add(treeOb);
  56.  
  57. }
  58. else if (itemOb.Value.GetType() == typeof(JArray))
  59. {
  60. treeOb = new TreeNode(itemOb.Key);
  61. AddTreeChildNode(ref treeOb, itemOb.Value.ToString());
  62. tree.Nodes.Add(treeOb);
  63. }
  64. else
  65. {
  66. treeOb = new TreeNode(itemOb.Key + ":" + itemOb.Value.ToString());
  67. tree.Nodes.Add(treeOb);
  68. }
  69. }
  70. treeView.Nodes.Add(tree);
  71. }
  72. }
  73. treeView.ExpandAll();
  74. }
  75.  
  76. /// <summary>
  77. /// 添加子节点
  78. /// </summary>
  79. /// <param name="parantNode"></param>
  80. /// <param name="value"></param>
  81. public void AddTreeChildNode(ref TreeNode parantNode, string value)
  82. {
  83. if (IsJOjbect(value))
  84. {
  85. JObject jo = (JObject)JsonConvert.DeserializeObject(value);
  86. foreach (var item in jo)
  87. {
  88. TreeNode tree;
  89. if (item.Value.GetType() == typeof(JObject))
  90. {
  91. tree = new TreeNode(item.Key);
  92. AddTreeChildNode(ref tree, item.Value.ToString());
  93. parantNode.Nodes.Add(tree);
  94. }
  95. else if (item.Value.GetType() == typeof(JArray))
  96. {
  97. tree = new TreeNode(item.Key);
  98. AddTreeChildNode(ref tree, item.Value.ToString());
  99. parantNode.Nodes.Add(tree);
  100. }
  101. else
  102. {
  103. tree = new TreeNode(item.Key + ":" + item.Value.ToString());
  104. parantNode.Nodes.Add(tree);
  105. }
  106. }
  107. }
  108. if (IsJArray(value))
  109. {
  110. JArray ja = (JArray)JsonConvert.DeserializeObject(value);
  111. ;
  112. foreach (JObject item in ja)
  113. {
  114. TreeNode tree = new TreeNode("Array [" + (i++) + "]");
  115. parantNode.Nodes.Add(tree);
  116. foreach (var itemOb in item)
  117. {
  118. TreeNode treeOb;
  119. if (itemOb.Value.GetType() == typeof(JObject))
  120. {
  121. treeOb = new TreeNode(itemOb.Key);
  122. AddTreeChildNode(ref treeOb, itemOb.Value.ToString());
  123. tree.Nodes.Add(treeOb);
  124.  
  125. }
  126. else if (itemOb.Value.GetType() == typeof(JArray))
  127. {
  128. treeOb = new TreeNode(itemOb.Key);
  129. AddTreeChildNode(ref treeOb, itemOb.Value.ToString());
  130. tree.Nodes.Add(treeOb);
  131. }
  132. else
  133. {
  134. treeOb = new TreeNode(itemOb.Key + ":" + itemOb.Value.ToString());
  135. tree.Nodes.Add(treeOb);
  136. }
  137. }
  138. }
  139. }
  140. }
  141.  
  142. /// <summary>
  143. /// 判断是否JOjbect类型
  144. /// </summary>
  145. /// <param name="value"></param>
  146. /// <returns></returns>
  147. private bool IsJOjbect(string value)
  148. {
  149. try
  150. {
  151. JObject ja = JObject.Parse(value);
  152. return true;
  153. }
  154. catch (Exception ex)
  155. {
  156. return false;
  157. }
  158. }
  159.  
  160. /// <summary>
  161. /// 判断是否JArray类型
  162. /// </summary>
  163. /// <param name="value"></param>
  164. /// <returns></returns>
  165. private bool IsJArray(string value)
  166. {
  167. try
  168. {
  169. JArray ja = JArray.Parse(value);
  170. return true;
  171. }
  172. catch (Exception ex)
  173. {
  174. return false;
  175. }
  176. }

下载项目

编译后Debug

HTTP模拟工具【C#/Winform源码】、Json绑定TreeView控件、使用了MetroModernUI、RestSharp、Dapper.Net、Newtonsoft.Json、SmartThreadPool这几个主要开源框架的更多相关文章

  1. 实例源码--Android的ListView控件的总结

    下载源码   技术要点: 1.ListView控件的总结 2.微信ListView气泡的实现 3.ListView仿优酷播放列表 4.ListView刷新列表 5.详细的源码注释 ...... 详细介 ...

  2. UiAutomator源码分析之获取控件信息

    根据上一篇文章<UiAutomator源码分析之注入事件>开始时提到的计划,这一篇文章我们要分析的是第二点: 如何获取控件信息 我们在测试脚本中初始化一个UiObject的时候通常是像以下 ...

  3. JGUI源码:实现日期控件显示(17)

    本文实现一个日期控件显示,日期控件看起来很复杂,其实原理很简单,大部分情况下我们直接使用别人做得好的日期控件就行,但有时候特殊需求,比如显示提醒之类的,恐怕第三方控件就不好实现了, 为了使程序逻辑看起 ...

  4. 驾照理论模拟考试系统Android源码下载

    ‍‍‍驾照理论模拟考试系统Android源码下载 <ignore_js_op> 9.png (55.77 KB, 下载次数: 0) <ignore_js_op> 10.png ...

  5. IPerf——网络测试工具介绍与源码解析(4)

    上篇随笔讲到了TCP模式下的客户端,接下来会讲一下TCP模式普通场景下的服务端,说普通场景则是暂时不考虑双向测试的可能,毕竟了解一项东西还是先从简单的情况下入手会快些. 对于服务端,并不是我们认为的直 ...

  6. XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译

    XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译 <?xml version="1.0" encoding="UTF-8" ...

  7. Java并发工具类CountDownLatch源码中的例子

    Java并发工具类CountDownLatch源码中的例子 实例一 原文描述 /** * <p><b>Sample usage:</b> Here is a pai ...

  8. Winform中怎样在工具类中对窗体中多个控件进行操作(赋值)

    场景 需求是在窗体加载完成后掉用工具类的方法,工具类中获取窗体的多个控件对象进行赋值. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 ...

  9. [WinForm]WinForm跨线程UI操作常用控件类大全

    前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...

随机推荐

  1. 在vue-cli搭建的项目中增加后台mock接口

    用vue-cli搭建一个前端开发环境确实是极其方便,在写前端代码肯定也是少不了需要调用后台提供的业务接口进行前后端交互,特别在敏捷开发中,前后端都要提前确定业务接口并进行打桩,在开发过程中基本是没有现 ...

  2. haproxy内存管理-free_list原理

    haproxy的内存管理中,通过pool_head->free_list,存储空闲内存块,free_list是个二级指针,却把空闲内存块都串了起来,没有用next,pre之类的指针.怎么实现的? ...

  3. 关于在Mac OS下安装npm与cnpm的ERR! Darwin 15.0.0解决办法

    mac os安装好了很久了,不过没怎么用,昨天想要体验一下大神们推荐的黑苹果系统用起来怎么样(关于安装黑苹果的可以到我的简书去看相关文章),于是乎,打开久违的vmware,看着咬一口的苹果进度图,心中 ...

  4. python小工具:用python操作HP的Quality Center (二)----- 用异步方式提高速度

    上接第一篇 http://www.cnblogs.com/sdet/p/6874631.html 在python中,很简单地能把http请求通过异步的方式发送,以下代码在python 3.6.0上运行 ...

  5. Open vSwitch中的datapath flow匹配过程

    看OVS2.7的datapath表项匹配是一件很蛋疼的事情 数据结构看不懂 匹配算法经过了多次演进,已经有点复杂了,看代码完全看不懂,我能怎么办,我也很绝望啊!   2.1之前精确匹配时代,匹配过程是 ...

  6. (转)java web 学习之路(学习顺序)

    第一步:学习HTML和CSS HTML(超文本标记语言)是网页的核心,学好HTML是成为Web开发人员的基本条件.HTML很容易学习的,但也很容易误用,要学精还得费点功夫. 随着HTML5的发展和普及 ...

  7. Netty方法误解ChannelHandlerContext.writeAndFlush(Object msg)

    乍一看这个方法,以为什么消息都能输出,因为参数是Object类型的,但实际上,netty内部只支持两种类型,如图

  8. cpio用法详细说明

    1.1 cpio基本介绍 cpio是一个非常古老的归档工具.已逐渐被tar替代,但是有些功能是tar不存在的,所以还是分享下它的用法. cpio - copy files to and from ar ...

  9. css3动画小案例

    今天与大家来分享一下我做的css3动画案例. 在展示我的案例之前先给大家说说实现这个案例所需要的一些属性. transform 属性允许我们对元素进行旋转.缩放.移动或倾斜. 通过 CSS3 2D转换 ...

  10. window对象screen、history

    Window 对象属性 http://www.runoob.com/jsref/obj-window.html