县级监管平台

HttpMethods.cs 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Net;
  7. using System.Net.Http;
  8. using System.Net.Security;
  9. using System.Security.Cryptography.X509Certificates;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace CallCenterApi.Common
  13. {
  14. public class HttpMethods
  15. {
  16. #region POST
  17. /// <summary>
  18. /// HTTP POST方式请求数据
  19. /// </summary>
  20. /// <param name="url">URL.</param>
  21. /// <param name="param">POST的数据</param>
  22. /// <returns></returns>
  23. public static string HttpPost(string url, string param = null)
  24. {
  25. HttpWebRequest request;
  26. //如果是发送HTTPS请求
  27. if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
  28. {
  29. ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
  30. request = WebRequest.Create(url) as HttpWebRequest;
  31. request.ProtocolVersion = HttpVersion.Version10;
  32. }
  33. else
  34. {
  35. request = WebRequest.Create(url) as HttpWebRequest;
  36. }
  37. request.Method = "POST";
  38. request.ContentType = "application/x-www-form-urlencoded";
  39. request.Accept = "*/*";
  40. request.Timeout = 15000;
  41. request.AllowAutoRedirect = false;
  42. StreamWriter requestStream = null;
  43. WebResponse response = null;
  44. string responseStr = null;
  45. try
  46. {
  47. requestStream = new StreamWriter(request.GetRequestStream());
  48. requestStream.Write(param);
  49. requestStream.Close();
  50. response = request.GetResponse();
  51. if (response != null)
  52. {
  53. StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
  54. responseStr = reader.ReadToEnd();
  55. reader.Close();
  56. }
  57. }
  58. catch (Exception)
  59. {
  60. throw;
  61. }
  62. finally
  63. {
  64. request = null;
  65. requestStream = null;
  66. response = null;
  67. }
  68. return responseStr;
  69. }
  70. private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
  71. {
  72. return true; //总是接受
  73. }
  74. public static string BuildRequest(string strUrl, Dictionary<string, string> dicPara, string fileName)
  75. {
  76. string contentType = "image/jpeg";
  77. //待请求参数数组
  78. FileStream Pic = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
  79. byte[] PicByte = new byte[Pic.Length];
  80. Pic.Read(PicByte, 0, PicByte.Length);
  81. int lengthFile = PicByte.Length;
  82. //构造请求地址
  83. //设置HttpWebRequest基本信息
  84. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(strUrl);
  85. //设置请求方式:get、post
  86. request.Method = "POST";
  87. //设置boundaryValue
  88. string boundaryValue = DateTime.Now.Ticks.ToString("x");
  89. string boundary = "--" + boundaryValue;
  90. request.ContentType = "\r\nmultipart/form-data; boundary=" + boundaryValue;
  91. //设置KeepAlive
  92. request.KeepAlive = true;
  93. //设置请求数据,拼接成字符串
  94. StringBuilder sbHtml = new StringBuilder();
  95. foreach (KeyValuePair<string, string> key in dicPara)
  96. {
  97. sbHtml.Append(boundary + "\r\nContent-Disposition: form-data; name=\"" + key.Key + "\"\r\n\r\n" + key.Value + "\r\n");
  98. }
  99. sbHtml.Append(boundary + "\r\nContent-Disposition: form-data; name=\"pic\"; filename=\"");
  100. sbHtml.Append(fileName);
  101. sbHtml.Append("\"\r\nContent-Type: " + contentType + "\r\n\r\n");
  102. string postHeader = sbHtml.ToString();
  103. //将请求数据字符串类型根据编码格式转换成字节流
  104. Encoding code = Encoding.GetEncoding("UTF-8");
  105. byte[] postHeaderBytes = code.GetBytes(postHeader);
  106. byte[] boundayBytes = Encoding.ASCII.GetBytes("\r\n" + boundary + "--\r\n");
  107. //设置长度
  108. long length = postHeaderBytes.Length + lengthFile + boundayBytes.Length;
  109. request.ContentLength = length;
  110. //请求远程HTTP
  111. Stream requestStream = request.GetRequestStream();
  112. Stream myStream = null;
  113. try
  114. {
  115. //发送数据请求服务器
  116. requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
  117. requestStream.Write(PicByte, 0, lengthFile);
  118. requestStream.Write(boundayBytes, 0, boundayBytes.Length);
  119. HttpWebResponse HttpWResp = (HttpWebResponse)request.GetResponse();
  120. myStream = HttpWResp.GetResponseStream();
  121. }
  122. catch (WebException e)
  123. {
  124. //LogResult(e.Message);
  125. return "";
  126. }
  127. finally
  128. {
  129. if (requestStream != null)
  130. {
  131. requestStream.Close();
  132. }
  133. }
  134. //读取处理结果
  135. StreamReader reader = new StreamReader(myStream, code);
  136. StringBuilder responseData = new StringBuilder();
  137. String line;
  138. while ((line = reader.ReadLine()) != null)
  139. {
  140. responseData.Append(line);
  141. }
  142. myStream.Close();
  143. Pic.Close();
  144. return responseData.ToString();
  145. }
  146. #endregion
  147. #region Put
  148. /// <summary>
  149. /// HTTP Put方式请求数据.
  150. /// </summary>
  151. /// <param name="url">URL.</param>
  152. /// <returns></returns>
  153. public static string HttpPut(string url, string param = null)
  154. {
  155. HttpWebRequest request;
  156. //如果是发送HTTPS请求
  157. if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
  158. {
  159. ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
  160. request = WebRequest.Create(url) as HttpWebRequest;
  161. request.ProtocolVersion = HttpVersion.Version10;
  162. }
  163. else
  164. {
  165. request = WebRequest.Create(url) as HttpWebRequest;
  166. }
  167. request.Method = "PUT";
  168. request.ContentType = "application/x-www-form-urlencoded";
  169. request.Accept = "*/*";
  170. request.Timeout = 15000;
  171. request.AllowAutoRedirect = false;
  172. StreamWriter requestStream = null;
  173. WebResponse response = null;
  174. string responseStr = null;
  175. try
  176. {
  177. requestStream = new StreamWriter(request.GetRequestStream());
  178. requestStream.Write(param);
  179. requestStream.Close();
  180. response = request.GetResponse();
  181. if (response != null)
  182. {
  183. StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
  184. responseStr = reader.ReadToEnd();
  185. reader.Close();
  186. }
  187. }
  188. catch (Exception)
  189. {
  190. throw;
  191. }
  192. finally
  193. {
  194. request = null;
  195. requestStream = null;
  196. response = null;
  197. }
  198. return responseStr;
  199. }
  200. #endregion
  201. #region Delete
  202. /// <summary>
  203. /// HTTP Delete方式请求数据.
  204. /// </summary>
  205. /// <param name="url">URL.</param>
  206. /// <returns></returns>
  207. public static string HttpDelete(string url, string param = null)
  208. {
  209. HttpWebRequest request;
  210. //如果是发送HTTPS请求
  211. if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
  212. {
  213. ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
  214. request = WebRequest.Create(url) as HttpWebRequest;
  215. request.ProtocolVersion = HttpVersion.Version10;
  216. }
  217. else
  218. {
  219. request = WebRequest.Create(url) as HttpWebRequest;
  220. }
  221. request.Method = "Delete";
  222. request.ContentType = "application/x-www-form-urlencoded";
  223. request.Accept = "*/*";
  224. request.Timeout = 15000;
  225. request.AllowAutoRedirect = false;
  226. StreamWriter requestStream = null;
  227. WebResponse response = null;
  228. string responseStr = null;
  229. try
  230. {
  231. requestStream = new StreamWriter(request.GetRequestStream());
  232. requestStream.Write(param);
  233. requestStream.Close();
  234. response = request.GetResponse();
  235. if (response != null)
  236. {
  237. StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
  238. responseStr = reader.ReadToEnd();
  239. reader.Close();
  240. }
  241. }
  242. catch (Exception)
  243. {
  244. throw;
  245. }
  246. return responseStr;
  247. }
  248. #endregion
  249. #region Get
  250. /// <summary>
  251. /// HTTP GET方式请求数据.
  252. /// </summary>
  253. /// <param name="url">URL.</param>
  254. /// <returns></returns>
  255. public static string HttpGet(string url, Hashtable headht = null)
  256. {
  257. HttpWebRequest request;
  258. //如果是发送HTTPS请求
  259. if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
  260. {
  261. ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
  262. request = WebRequest.Create(url) as HttpWebRequest;
  263. request.ProtocolVersion = HttpVersion.Version10;
  264. }
  265. else
  266. {
  267. request = WebRequest.Create(url) as HttpWebRequest;
  268. }
  269. request.Method = "GET";
  270. //request.ContentType = "application/x-www-form-urlencoded";
  271. request.Accept = "*/*";
  272. request.Timeout = 15000;
  273. request.AllowAutoRedirect = false;
  274. WebResponse response = null;
  275. string responseStr = null;
  276. if (headht != null)
  277. {
  278. foreach (DictionaryEntry item in headht)
  279. {
  280. request.Headers.Add(item.Key.ToString(), item.Value.ToString());
  281. }
  282. }
  283. try
  284. {
  285. response = request.GetResponse();
  286. if (response != null)
  287. {
  288. StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
  289. responseStr = reader.ReadToEnd();
  290. reader.Close();
  291. }
  292. }
  293. catch (Exception)
  294. {
  295. throw;
  296. }
  297. return responseStr;
  298. }
  299. public static string HttpGet(string url, Encoding encodeing, Hashtable headht = null)
  300. {
  301. HttpWebRequest request;
  302. //如果是发送HTTPS请求
  303. if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
  304. {
  305. ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
  306. request = WebRequest.Create(url) as HttpWebRequest;
  307. request.ProtocolVersion = HttpVersion.Version10;
  308. }
  309. else
  310. {
  311. request = WebRequest.Create(url) as HttpWebRequest;
  312. }
  313. request.Method = "GET";
  314. //request.ContentType = "application/x-www-form-urlencoded";
  315. request.Accept = "*/*";
  316. request.Timeout = 15000;
  317. request.AllowAutoRedirect = false;
  318. WebResponse response = null;
  319. string responseStr = null;
  320. if (headht != null)
  321. {
  322. foreach (DictionaryEntry item in headht)
  323. {
  324. request.Headers.Add(item.Key.ToString(), item.Value.ToString());
  325. }
  326. }
  327. try
  328. {
  329. response = request.GetResponse();
  330. if (response != null)
  331. {
  332. StreamReader reader = new StreamReader(response.GetResponseStream(), encodeing);
  333. responseStr = reader.ReadToEnd();
  334. reader.Close();
  335. }
  336. }
  337. catch (Exception)
  338. {
  339. throw;
  340. }
  341. return responseStr;
  342. }
  343. #endregion
  344. #region Post With Pic
  345. private string HttpPost(string url, IDictionary<object, object> param, string filePath)
  346. {
  347. string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
  348. byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
  349. HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
  350. wr.ContentType = "multipart/form-data; boundary=" + boundary;
  351. wr.Method = "POST";
  352. wr.KeepAlive = true;
  353. wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
  354. Stream rs = wr.GetRequestStream();
  355. string responseStr = null;
  356. string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
  357. foreach (string key in param.Keys)
  358. {
  359. rs.Write(boundarybytes, 0, boundarybytes.Length);
  360. string formitem = string.Format(formdataTemplate, key, param[key]);
  361. byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
  362. rs.Write(formitembytes, 0, formitembytes.Length);
  363. }
  364. rs.Write(boundarybytes, 0, boundarybytes.Length);
  365. string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
  366. string header = string.Format(headerTemplate, "pic", filePath, "text/plain");
  367. byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
  368. rs.Write(headerbytes, 0, headerbytes.Length);
  369. FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
  370. byte[] buffer = new byte[4096];
  371. int bytesRead = 0;
  372. while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
  373. {
  374. rs.Write(buffer, 0, bytesRead);
  375. }
  376. fileStream.Close();
  377. byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
  378. rs.Write(trailer, 0, trailer.Length);
  379. rs.Close();
  380. WebResponse wresp = null;
  381. try
  382. {
  383. wresp = wr.GetResponse();
  384. Stream stream2 = wresp.GetResponseStream();
  385. StreamReader reader2 = new StreamReader(stream2);
  386. responseStr = reader2.ReadToEnd();
  387. //logger.Debug(string.Format("File uploaded, server response is: {0}", responseStr));
  388. }
  389. catch (Exception ex)
  390. {
  391. //logger.Error("Error uploading file", ex);
  392. if (wresp != null)
  393. {
  394. wresp.Close();
  395. wresp = null;
  396. }
  397. throw;
  398. }
  399. return responseStr;
  400. }
  401. #endregion
  402. #region Post With Pic
  403. /// <summary>
  404. /// HTTP POST方式请求数据(带图片)
  405. /// </summary>
  406. /// <param name="url">URL</param>
  407. /// <param name="param">POST的数据</param>
  408. /// <param name="fileByte">图片</param>
  409. /// <returns></returns>
  410. public static string HttpPost(string url, IDictionary<object, object> param, byte[] fileByte)
  411. {
  412. string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
  413. byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
  414. HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
  415. wr.ContentType = "multipart/form-data; boundary=" + boundary;
  416. wr.Method = "POST";
  417. wr.KeepAlive = true;
  418. wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
  419. Stream rs = wr.GetRequestStream();
  420. string responseStr = null;
  421. string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
  422. foreach (string key in param.Keys)
  423. {
  424. rs.Write(boundarybytes, 0, boundarybytes.Length);
  425. string formitem = string.Format(formdataTemplate, key, param[key]);
  426. byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
  427. rs.Write(formitembytes, 0, formitembytes.Length);
  428. }
  429. rs.Write(boundarybytes, 0, boundarybytes.Length);
  430. string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
  431. string header = string.Format(headerTemplate, "pic", fileByte, "text/plain");//image/jpeg
  432. byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
  433. rs.Write(headerbytes, 0, headerbytes.Length);
  434. rs.Write(fileByte, 0, fileByte.Length);
  435. byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
  436. rs.Write(trailer, 0, trailer.Length);
  437. rs.Close();
  438. WebResponse wresp = null;
  439. try
  440. {
  441. wresp = wr.GetResponse();
  442. Stream stream2 = wresp.GetResponseStream();
  443. StreamReader reader2 = new StreamReader(stream2);
  444. responseStr = reader2.ReadToEnd();
  445. // logger.Error(string.Format("File uploaded, server response is: {0}", responseStr));
  446. }
  447. catch (Exception ex)
  448. {
  449. //logger.Error("Error uploading file", ex);
  450. if (wresp != null)
  451. {
  452. wresp.Close();
  453. wresp = null;
  454. }
  455. throw;
  456. }
  457. return responseStr;
  458. }
  459. #endregion
  460. #region HttpsClient
  461. /// <summary>
  462. /// 创建HttpClient
  463. /// </summary>
  464. /// <returns></returns>
  465. public static HttpClient CreateHttpClient(string url)
  466. {
  467. HttpClient httpclient;
  468. //如果是发送HTTPS请求
  469. if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
  470. {
  471. ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
  472. httpclient = new HttpClient();
  473. }
  474. else
  475. {
  476. httpclient = new HttpClient();
  477. }
  478. return httpclient;
  479. }
  480. #endregion
  481. }
  482. }