C# 接口的Get、Post、WebService请求方法一览,值得收藏

  1. public static class HttpHelper
  2. {
  3. const string DEFAULT_USER_AGENT = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 4.0.30319)";
  4. const string DEFAULT_CONTENT_TYPE = "application/json";
  5.  
  6. #region Http Get Method
  7. /// <summary>
  8. /// GET请求
  9. /// </summary>
  10. /// <param name="url"></param>
  11. /// <returns></returns>
  12. public static string Get(string url)
  13. {
  14. return Get(url, null);
  15. }
  16.  
  17. /// <summary>
  18. /// GET请求,可以添加自定义的Header信息
  19. /// </summary>
  20. /// <returns></returns>
  21. public static string Get(string url, IDictionary<string, string> headerList)
  22. {
  23. var request = (HttpWebRequest)WebRequest.Create(url);
  24. request.UserAgent = DEFAULT_USER_AGENT;
  25. request.ContentType = DEFAULT_CONTENT_TYPE;
  26. if (headerList != null)
  27. {
  28. foreach (var header in headerList)
  29. {
  30. request.Headers.Add(header.Key, header.Value);
  31. }
  32. }
  33.  
  34. var responseStream = request.GetResponse().GetResponseStream();
  35.  
  36. using (var reader = new StreamReader(responseStream))
  37. {
  38. var result = reader.ReadToEnd();
  39.  
  40. responseStream.Close();
  41.  
  42. return result;
  43. }
  44. }
  45. #endregion
  46.  
  47. /// <summary>
  48. /// POST请求
  49. /// </summary>
  50. /// <param name="url"></param>
  51. /// <param name="postData"></param>
  52. /// <param name="contentType"></param>
  53. /// <returns></returns>
  54. public static string Post(string url, string postData, string contentType = DEFAULT_CONTENT_TYPE)
  55. {
  56. var webClient = new WebClient();
  57. webClient.Headers.Add("user-agent", DEFAULT_USER_AGENT);
  58. webClient.Headers.Add("Content-Type", contentType);
  59. byte[] sendData = Encoding.UTF8.GetBytes(postData);
  60. byte[] responseData = webClient.UploadData(url, "POST", sendData);
  61. return Encoding.UTF8.GetString(responseData);
  62. }
  63.  
  64. /// <summary>
  65. /// POST请求,并可以传入Header信息
  66. /// </summary>
  67. /// <param name="url"></param>
  68. /// <param name="postData"></param>
  69. /// <param name="headParams"></param>
  70. /// <returns></returns>
  71. public static string Post(string url, string postData, IDictionary<string, string> headParams)
  72. {
  73. var webClient = new WebClient();
  74. webClient.Headers.Add("user-agent", DEFAULT_USER_AGENT);
  75. webClient.Headers.Add("Content-Type", DEFAULT_CONTENT_TYPE);
  76. if (headParams != null && headParams.Count > )
  77. {
  78. foreach (var item in headParams)
  79. {
  80. if (webClient.Headers.AllKeys.Contains(item.Key))
  81. {
  82. webClient.Headers.Remove(item.Key);
  83. }
  84. webClient.Headers.Add(item.Key, item.Value);
  85. }
  86. }
  87.  
  88. byte[] sendData = Encoding.UTF8.GetBytes(postData);
  89. byte[] responseData = webClient.UploadData(url, "POST", sendData);
  90. return Encoding.UTF8.GetString(responseData);
  91. }
  92.  
  93. /// <summary>
  94. /// HTTP Post请求,可以传入Header信息和超时限制
  95. /// </summary>
  96. /// <param name="url"></param>
  97. /// <param name="content"></param>
  98. /// <param name="headParams"></param>
  99. /// <param name="timeout"></param>
  100. /// <returns></returns>
  101. public static string HttpPost(string url, string content,string ContentType, IDictionary<string, string> headParams,int timeout)
  102. {
  103. try
  104. {
  105. string result = string.Empty;
  106.  
  107. HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
  108. req.Method = "POST";
  109. req.ContentType = ContentType;
  110. if (headParams != null && headParams.Count > )
  111. {
  112. foreach (var item in headParams)
  113. {
  114. if (req.Headers.AllKeys.Contains(item.Key))
  115. {
  116. req.Headers.Remove(item.Key);
  117. }
  118. req.Headers.Add(item.Key, item.Value);
  119. }
  120. }
  121.  
  122. byte[] data = Encoding.UTF8.GetBytes(content);
  123. req.ContentLength = data.Length;
  124. req.Timeout = timeout * ;
  125. using (Stream reqStream = req.GetRequestStream())
  126. {
  127. reqStream.Write(data, , data.Length);
  128. reqStream.Close();
  129. }
  130.  
  131. HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
  132. Stream stream = resp.GetResponseStream();
  133. //获取响应内容
  134. using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
  135. {
  136. result = reader.ReadToEnd();
  137. }
  138. return result;
  139. }
  140. catch (Exception ex)
  141. {
  142. throw ex;
  143. }
  144. }
  145.  
  146. /// <summary>
  147. /// 需要WebService支持Get调用
  148. /// </summary>
  149. public static string WebServiceGet(String url, String methodname, Hashtable pars)
  150. {
  151. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url + "/" + methodname + "?" + HashtableToPostData(pars));
  152. request.Method = "GET";
  153. request.ContentType = "application/x-www-form-urlencoded";
  154. // 凭证
  155. request.Credentials = CredentialCache.DefaultCredentials;
  156. //超时时间
  157. request.Timeout = ;
  158. var response = request.GetResponse();
  159. var stream = response.GetResponseStream();
  160. StreamReader sr = new StreamReader(stream, Encoding.UTF8);
  161. String retXml = sr.ReadToEnd();
  162. sr.Close();
  163. return retXml;
  164. }
  165.  
  166. /// <summary>
  167. /// 需要WebService支持Post调用
  168. /// </summary>
  169. public static string PostWebServiceByJson(String url, String methodname, Hashtable pars)
  170. {
  171. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url + "/" + methodname);
  172. request.Method = "POST";
  173. request.ContentType = "application/json;charset=utf-8";
  174. request.Credentials = CredentialCache.DefaultCredentials;
  175. request.Timeout = ;
  176. byte[] data = Encoding.UTF8.GetBytes(HashtableToPostData(pars));
  177. request.ContentLength = data.Length;
  178. Stream writer = request.GetRequestStream();
  179. writer.Write(data, , data.Length);
  180. writer.Close();
  181.  
  182. StreamReader sr = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8);
  183. string retXml = sr.ReadToEnd();
  184. sr.Close();
  185. return retXml;
  186. }
  187.  
  188. /// <summary>
  189. /// http Post调用 WebService
  190. /// </summary>
  191. public static XmlDocument QueryPostWebService(String URL,
  192. String MethodName, Hashtable Pars) {
  193.  
  194. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName);
  195. request.Method = "POST";
  196. request.ContentType = "application/x-www-form-urlencoded";
  197. request.Credentials = CredentialCache.DefaultCredentials;
  198. request.Timeout = ;
  199. #region 参数拼接成字符串,最后编码
  200. StringBuilder sb = new StringBuilder();
  201. foreach (string k in Pars.Keys) {
  202. if (sb.Length > ) {
  203. sb.Append("&");
  204. }
  205. sb.Append(
  206. HttpUtility.UrlEncode(k) + "="
  207. + HttpUtility.UrlEncode(Pars[k].ToString())
  208. );
  209. }
  210. byte[] data = Encoding.UTF8.GetBytes(sb.ToString());
  211. #endregion
  212. #region 把编码后的参数写入请求流中
  213. request.ContentLength = data.Length;
  214. Stream writer = request.GetRequestStream();
  215. writer.Write(data, , data.Length);
  216. writer.Close();
  217. #endregion
  218. #region 读取结果,创建XmlDocument对象,对象加载结果
  219. var response = request.GetResponse();
  220. StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
  221. String retXml = sr.ReadToEnd();
  222. sr.Close();
  223. XmlDocument doc = new XmlDocument();
  224. doc.LoadXml(retXml);
  225. #endregion
  226. return doc;
  227. }
  228.  
  229. private static String HashtableToPostData(Hashtable ht)
  230. {
  231. StringBuilder sb = new StringBuilder();
  232. foreach (string k in ht.Keys)
  233. {
  234. if (sb.Length > )
  235. {
  236. sb.Append("&");
  237. }
  238. sb.Append(HttpUtility.UrlEncode(k) + "=" + HttpUtility.UrlEncode(ht[k].ToString()));
  239. }
  240. return sb.ToString();
  241. }
  242.  
  243. }

C# 接口的Get、Post、WebService请求方法一览,值得收藏的更多相关文章

  1. Postman接口测试之POST、GET请求方法

    一.基础知识 1.HTTP的五种请求方法:GET, POST ,HEAD,OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法. GET请求:请求指定的页面信息,并返回实体 ...

  2. 【转】Postman接口测试之POST、GET请求方法

    转自竹小冉: https://www.cnblogs.com/zhuxr/p/9009708.html 一.基础知识 1.HTTP的五种请求方法:GET, POST ,HEAD,OPTIONS, PU ...

  3. Python | 常见的反爬及解决方法,值得收藏

    我们都知道Python用来爬数据,为了不让自家的数据被别人随意的爬走,你知道怎么反爬吗?今天播妞带着大家一起见识见识常见的反爬技术. 很多人学习python,不知道从何学起.很多人学习python,掌 ...

  4. 利用Python爬虫轻松挣外快的几个方法(值得收藏)

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:小猿猿er 在下写了10年Python,期间写了各种奇葩爬虫,挣各种奇葩 ...

  5. 转载-- http接口、api接口、RPC接口、RMI、webservice、Restful等概念

     http接口.api接口.RPC接口.RMI.webservice.Restful等概念 收藏 Linux一叶 https://my.oschina.net/heavenly/blog/499661 ...

  6. loadrunner通过web的post请求方法测接口 1

    loadrunner通过web的post请求方法测接口 loginapi() {     web_url("rest",          "URL=http://192 ...

  7. loadrunner通过web的post请求方法测接口

    loadrunner通过web的post请求方法测接口 loginapi() 模拟APP发送请求给Cloud, Action() "Name=input","Value= ...

  8. HttpClient 通过域名访问请求接口出现java.net.UnknownHostException解决方法

    在项目中,有一个功能需要请求另外一个项目的接口来获取数据.该项目接口都是通过域名请求访问.每当调用到一定阶段后都会出现未知域名,导致请求数据失败.以下是错误内容 java.net.UnknownHos ...

  9. kettle的HTTPPOST控件发送WSDL的webservice请求配置

    1.webservice请求的URL:http://pubservice.rjhn.com.cn/AppserviceTest/JsonWcfService.svc?WSDL 2.使用SOAPUI测试 ...

随机推荐

  1. PHP jdtojewish() 函数

    ------------恢复内容开始------------ 实例 把儒略日计数转换为犹太历法的日期: <?php$jd=jdtojewish(1789430); echo $jd;?> ...

  2. PHP strcasecmp() 函数

    实例 比较两个字符串(不区分大小写): <?php高佣联盟 www.cgewang.comecho strcasecmp("Hello world!","HELLO ...

  3. bzoj 3790 神奇项链 回文串 manacher|PAM

    LINK:神奇项链 存在两个操作:1. 一个操作可以生成所有形式的回文串 2.一个操作可以将两个串给合并起来 如果前缀和后缀相同还可以将其并起来. 多组询问 每次询问合成一个串所需最少多少次2操作. ...

  4. 数据库Schema

    在学习SQL的过程中,会遇到一个让你迷糊的Schema的概念.实际上,schema就是数据库对象的集合,这个集合包含了各种对象如:表.视图.存储过程.索引等.为了区分不同的集合,就需要给不同的集合起不 ...

  5. Java线程池的了解使用—筑基篇

    前言 Java中的线程池是一个很重要的概念,它的应用场景十分广泛,可以被广泛的用于高并发的处理场景.J.U.C提供的线程池:ThreadPoolExecutor类,可以帮助我们管理线程并方便地并行执行 ...

  6. 【leetcode每日两题】-Day1-简单题

    1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素 ...

  7. Shiro探索1. Realm

    1. Realm 是什么?汉语意思:领域,范围:王国:这个比较抽象: 简单一点就是:Realm 用来对用户进行认证和角色授权的 再简单一点,一个用户怎么判断它有没有登陆?这个用户是什么角色有哪些权限? ...

  8. CSS部分样式知识

    css文件 /* 注释内容 */ /* 选择器,其中body就是一个选择器,表示选中个body这个标签 声明块:为选择器设置样式 { 样式名: 样式值; } */ body{ background-c ...

  9. JS 模仿京东键盘输入内容

    css代码 .search { width: 300px; height: 80px; margin: 0 auto; position: relative; } .con { display: no ...

  10. 【Python学习笔记】字符串拼接方法(5种)总结

    字符串的 5 种拼接方法: “+”号 “,”号 直接连接 格式化 多行字符串拼接 第一种:“+”号 print("Hello"+"Python") 打印结果: ...