HttpUtil.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Net.Http;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Xml;
  10. using wms.dto.response;
  11. using wms.util.Ext;
  12. namespace wms.util.Http
  13. {
  14. public class HttpUtil
  15. {
  16. public static string ERPWebServerPath = string.Empty;
  17. #region Get请求
  18. /// <summary>
  19. /// Get请求
  20. /// </summary>
  21. /// <param name="remoteUrl">接口地址</param>
  22. /// <param name="timeOut">超时时间</param>
  23. /// <param name="encode">编码方式</param>
  24. /// <param name="contentType">内容格式</param>
  25. public static string GetRequest(string remoteUrl, int timeOut = 30000, string encode = "UTF-8", string contentType = "application/json")
  26. {
  27. var result = "";
  28. try
  29. {
  30. var mRequest = (HttpWebRequest)WebRequest.Create(remoteUrl);
  31. mRequest.Timeout = timeOut;
  32. mRequest.ContentType = contentType;
  33. var mResponse = (HttpWebResponse)mRequest.GetResponse();
  34. Stream responseStream = mResponse.GetResponseStream();
  35. if (responseStream == null)
  36. {
  37. return string.Empty;
  38. }
  39. using (System.IO.StreamReader reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding(encode)))
  40. {
  41. result = reader.ReadToEnd();
  42. }
  43. responseStream.Close();
  44. }
  45. catch (Exception ex)
  46. {
  47. throw ex;
  48. }
  49. return result;
  50. }
  51. #endregion Get请求
  52. #region POST请求
  53. /// <summary>
  54. /// 发起HTTP请求
  55. /// </summary>
  56. /// <param name="remoteUrl">接口地址</param>
  57. /// <param name="postData">请求参数</param>
  58. /// <param name="timeOut">超时时间</param>
  59. /// <param name="encode">编码方式</param>
  60. /// <param name="contentType">内容格式</param>
  61. public static string PostRequest(string remoteUrl, string postData, int timeOut = 30000, string encode = "UTF-8", string contentType = "application/json", string requestid = "", string sourcecode = "", string servicecode = "")
  62. {
  63. var result = string.Empty;
  64. try
  65. {
  66. var mRequest = (HttpWebRequest)WebRequest.Create(remoteUrl);
  67. //相应请求的参数
  68. byte[] data = Encoding.GetEncoding(encode).GetBytes(postData);
  69. mRequest.Method = "Post";
  70. mRequest.ContentType = contentType;
  71. mRequest.ContentLength = data.Length;
  72. mRequest.Timeout = timeOut;
  73. if (!string.IsNullOrEmpty(requestid))
  74. {
  75. mRequest.Headers["requestId"] = requestid;
  76. mRequest.Headers["sourceCode"] = sourcecode;
  77. mRequest.Headers["serviceCode"] = servicecode;
  78. }
  79. //请求流
  80. Stream requestStream = mRequest.GetRequestStream();
  81. requestStream.Write(data, 0, data.Length);
  82. requestStream.Close();
  83. //响应流
  84. var mResponse = (HttpWebResponse)mRequest.GetResponse();
  85. var responseStream = mResponse.GetResponseStream();
  86. Encoding code = Encoding.GetEncoding(encode);
  87. if (responseStream != null)
  88. {
  89. var readStream = new StreamReader(responseStream, code);
  90. var read = new Char[256];
  91. int count = readStream.Read(read, 0, 256);
  92. while (count > 0)
  93. {
  94. var str = new String(read, 0, count);
  95. result = result + str;
  96. count = readStream.Read(read, 0, 256);
  97. }
  98. responseStream.Close();
  99. }
  100. if (!string.IsNullOrEmpty(requestid) && mResponse.Headers["esbCode "] != "000000" && string.IsNullOrEmpty(result))
  101. {
  102. return new SRes() { ResCode = 500, ResMsg = "esbDesc:" + mResponse.Headers["esbDesc"], Memo1 = "esbCode:" + mResponse.Headers["esbCode"] }.ToCamelCaseString();
  103. }
  104. }
  105. catch (Exception ex)
  106. {
  107. throw ex;
  108. }
  109. return result;
  110. }
  111. private static readonly HttpClient _httpClient = new HttpClient();
  112. /// <summary>
  113. /// 发起HTTP请求
  114. /// </summary>
  115. /// <param name="remoteUrl">接口地址</param>
  116. /// <param name="postData">请求参数</param>
  117. /// <param name="encode">编码方式</param>
  118. /// <param name="contentType">内容格式</param>
  119. /// <param name="requestid">请求ID</param>
  120. /// <param name="sourcecode">来源代码</param>
  121. /// <param name="servicecode">服务代码</param>
  122. public static async Task<string> PostRequestAsync(string remoteUrl, string postData, string encode = "UTF-8", string contentType = "application/json", string requestid = "", string sourcecode = "", string servicecode = "")
  123. {
  124. try
  125. {
  126. var content = new StringContent(postData, Encoding.GetEncoding(encode), contentType);
  127. // 设置请求头
  128. if (!string.IsNullOrEmpty(requestid))
  129. {
  130. content.Headers.Add("requestId", requestid);
  131. content.Headers.Add("sourceCode", sourcecode);
  132. content.Headers.Add("serviceCode", servicecode);
  133. }
  134. // 发送异步POST请求
  135. using (var response = await _httpClient.PostAsync(remoteUrl, content))
  136. {
  137. response.EnsureSuccessStatusCode();
  138. // 读取响应内容
  139. var result = await response.Content.ReadAsStringAsync();
  140. if (!string.IsNullOrEmpty(requestid) && response.Headers.TryGetValues("esbCode", out var esbCodes) && !esbCodes.Contains("000000") && string.IsNullOrEmpty(result))
  141. {
  142. return new SRes() { ResCode = 500, ResMsg = "esbDesc:" + response.Headers.GetValues("esbDesc").FirstOrDefault(), Memo1 = "esbCode:" + esbCodes.FirstOrDefault() }.ToCamelCaseString();
  143. }
  144. return result;
  145. }
  146. }
  147. catch (Exception ex)
  148. {
  149. throw ex;
  150. }
  151. }
  152. /// <summary>
  153. /// 不等待的异步HTTP请求
  154. /// </summary>
  155. /// <param name="remoteUrl">接口地址</param>
  156. /// <param name="postData">请求参数</param>
  157. /// <param name="encode">编码方式</param>
  158. /// <param name="contentType">内容格式</param>
  159. /// <param name="requestid">请求ID</param>
  160. /// <param name="sourcecode">来源代码</param>
  161. /// <param name="servicecode">服务代码</param>
  162. public static void FireAndForgetPostRequest(string remoteUrl, string postData, string encode = "UTF-8", string contentType = "application/json", string requestid = "", string sourcecode = "", string servicecode = "")
  163. {
  164. _ = PostRequestAsync(remoteUrl, postData, encode, contentType, requestid, sourcecode, servicecode);
  165. }
  166. /// <summary>
  167. /// 通过POST提交方式获取XML数据
  168. /// </summary>
  169. /// <param name="postData">请求XML内容</param>
  170. /// <param name="remoteUrl">请求URL</param>
  171. /// <returns></returns>
  172. public static XmlDocument PostRequestXml(string remoteUrl, string postData)
  173. {
  174. if (string.IsNullOrEmpty(postData) || string.IsNullOrEmpty(remoteUrl))
  175. {
  176. return null;
  177. }
  178. string result = PostRequest(remoteUrl, postData, 30000, "UTF-8", "application/x-www-form-urlencoded");
  179. if (string.IsNullOrEmpty(result))
  180. {
  181. var xml = new XmlDocument();
  182. xml.LoadXml(result);
  183. return xml;
  184. }
  185. return null;
  186. }
  187. /// <summary>
  188. /// 发起HTTP请求
  189. /// </summary>
  190. /// <param name="remoteUrl">接口地址</param>
  191. /// <param name="postData">请求参数</param>
  192. /// <param name="timeOut">超时时间</param>
  193. /// <param name="encode">编码方式</param>
  194. /// <param name="contentType">内容格式</param>
  195. public static string PostRequestByWebApi(string remoteUrl, string postData, int timeOut = 30000, string encode = "UTF-8", string contentType = "application/json")//application/x-www-form-urlencoded application/json
  196. {
  197. var result = string.Empty;
  198. try
  199. {
  200. if (string.IsNullOrEmpty(remoteUrl))
  201. remoteUrl = ERPWebServerPath;
  202. var mRequest = (HttpWebRequest)WebRequest.Create(remoteUrl);
  203. //相应请求的参数
  204. byte[] data = Encoding.GetEncoding(encode).GetBytes(postData);
  205. mRequest.MaximumAutomaticRedirections = data.Length;
  206. mRequest.MaximumResponseHeadersLength = data.Length;
  207. mRequest.Method = "Post";
  208. mRequest.ContentType = contentType;
  209. mRequest.ContentLength = data.Length;
  210. mRequest.Timeout = timeOut;
  211. //请求流
  212. Stream requestStream = mRequest.GetRequestStream();
  213. requestStream.Write(data, 0, data.Length);
  214. requestStream.Close();
  215. //响应流
  216. var mResponse = (HttpWebResponse)mRequest.GetResponse();
  217. var responseStream = mResponse.GetResponseStream();
  218. Encoding code = Encoding.GetEncoding(encode);
  219. if (responseStream != null)
  220. {
  221. var readStream = new StreamReader(responseStream, code);
  222. var read = new Char[256];
  223. int count = readStream.Read(read, 0, 256);
  224. while (count > 0)
  225. {
  226. var str = new String(read, 0, count);
  227. result = result + str;
  228. count = readStream.Read(read, 0, 256);
  229. }
  230. responseStream.Close();
  231. }
  232. }
  233. catch (Exception ex)
  234. {
  235. throw ex;
  236. }
  237. return result;
  238. }
  239. #endregion POST请求
  240. }
  241. }