HttpTool.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. //############################################################
  2. // https://github.com/yuzhengyang
  3. // author:yuzhengyang
  4. //############################################################
  5. using Newtonsoft.Json;
  6. using System;
  7. using System.IO;
  8. using System.Net;
  9. using System.Text;
  10. using System.Web;
  11. using Y.Utils.DataUtils.StringUtils;
  12. using Y.Utils.DelegateUtils;
  13. namespace Y.Utils.NetUtils.HttpUtils
  14. {
  15. public class HttpTool
  16. {
  17. public static string Get(string url, string encoding = "utf-8")
  18. {
  19. string result = "";
  20. try
  21. {
  22. Encoding myEncoding = Encoding.GetEncoding(encoding);
  23. HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
  24. req.Method = "GET";
  25. using (WebResponse wr = req.GetResponse())
  26. {
  27. //在这里对接收到的页面内容进行处理
  28. result = new StreamReader(wr.GetResponseStream(), myEncoding).ReadToEnd();
  29. }
  30. }
  31. catch (Exception e) { }
  32. return result;
  33. }
  34. public static T Get<T>(string url, string encoding = "utf-8")
  35. {
  36. try
  37. {
  38. Encoding myEncoding = Encoding.GetEncoding(encoding);
  39. HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
  40. req.Method = "GET";
  41. using (WebResponse wr = req.GetResponse())
  42. {
  43. //在这里对接收到的页面内容进行处理
  44. string response = new StreamReader(wr.GetResponseStream(), myEncoding).ReadToEnd();
  45. if (!StringTool.IsNullOrWhiteSpace(response))
  46. {
  47. T result = JsonConvert.DeserializeObject<T>(response);
  48. return result;
  49. }
  50. }
  51. }
  52. catch (Exception e) { }
  53. return default(T);
  54. }
  55. public static string Post(string url, string param, string encoding = "utf-8")
  56. {
  57. string result = string.Empty;
  58. try
  59. {
  60. Encoding myEncoding = Encoding.GetEncoding(encoding);
  61. byte[] byteArray = myEncoding.GetBytes(param); //转化
  62. HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(url));
  63. webReq.Method = "POST";
  64. webReq.ContentType = "application/x-www-form-urlencoded";
  65. webReq.ContentLength = byteArray.Length;
  66. Stream newStream = webReq.GetRequestStream();
  67. newStream.Write(byteArray, 0, byteArray.Length);//写入参数
  68. newStream.Close();
  69. HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
  70. StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default);
  71. result = sr.ReadToEnd();
  72. sr.Close();
  73. response.Close();
  74. newStream.Close();
  75. }
  76. catch (Exception ex)
  77. { }
  78. return result;
  79. }
  80. public static T Post<T>(string url, string param, string encoding = "utf-8")
  81. {
  82. try
  83. {
  84. Encoding myEncoding = Encoding.GetEncoding(encoding);
  85. byte[] byteArray = myEncoding.GetBytes(param); //转化
  86. HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(url));
  87. webReq.Method = "POST";
  88. webReq.ContentType = "application/x-www-form-urlencoded";
  89. webReq.ContentLength = byteArray.Length;
  90. using (Stream newStream = webReq.GetRequestStream())
  91. {
  92. newStream.Write(byteArray, 0, byteArray.Length);//写入参数
  93. newStream.Close();
  94. using (HttpWebResponse response = (HttpWebResponse)webReq.GetResponse())
  95. {
  96. using (StreamReader sr = new StreamReader(response.GetResponseStream(), myEncoding))
  97. {
  98. string txt = sr.ReadToEnd();
  99. if (!string.IsNullOrWhiteSpace(txt))
  100. {
  101. T result = JsonConvert.DeserializeObject<T>(txt);
  102. return result;
  103. }
  104. }
  105. }
  106. }
  107. }
  108. catch (Exception ex) { }
  109. return default(T);
  110. }
  111. //public static string PostJson(string url, string param)
  112. //{
  113. // HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  114. // request.Method = "POST";
  115. // request.ContentType = "application/json";
  116. // request.ContentLength = Encoding.UTF8.GetByteCount(param);
  117. // Stream myRequestStream = request.GetRequestStream();
  118. // StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
  119. // myStreamWriter.Write(param);
  120. // myStreamWriter.Close();
  121. // HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  122. // Stream myResponseStream = response.GetResponseStream();
  123. // StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
  124. // string retString = myStreamReader.ReadToEnd();
  125. // myStreamReader.Close();
  126. // myResponseStream.Close();
  127. // return retString;
  128. //}
  129. public static string PostJson(string url, string param)
  130. {
  131. string rs = null;
  132. ServicePointManager.DefaultConnectionLimit = 300;
  133. CookieContainer cookieContainer = new CookieContainer();
  134. // 设置提交的相关参数
  135. HttpWebRequest request = null;
  136. HttpWebResponse SendSMSResponse = null;
  137. Stream dataStream = null;
  138. StreamReader SendSMSResponseStream = null;
  139. try
  140. {
  141. request = WebRequest.Create(url) as HttpWebRequest;
  142. request.Method = "POST";
  143. request.KeepAlive = false;
  144. request.ServicePoint.ConnectionLimit = 300;
  145. request.AllowAutoRedirect = true;
  146. request.Timeout = 10000;
  147. request.ReadWriteTimeout = 10000;
  148. request.ContentType = "application/json";
  149. request.Accept = "application/xml";
  150. request.Headers.Add("X-Auth-Token", HttpUtility.UrlEncode("OpenStack"));
  151. string strContent = param;
  152. byte[] bytes = Encoding.UTF8.GetBytes(strContent);
  153. request.Proxy = null;
  154. request.CookieContainer = cookieContainer;
  155. using (dataStream = request.GetRequestStream())
  156. {
  157. dataStream.Write(bytes, 0, bytes.Length);
  158. }
  159. SendSMSResponse = (HttpWebResponse)request.GetResponse();
  160. if (SendSMSResponse.StatusCode == HttpStatusCode.RequestTimeout)
  161. {
  162. if (SendSMSResponse != null)
  163. {
  164. SendSMSResponse.Close();
  165. SendSMSResponse = null;
  166. }
  167. if (request != null)
  168. {
  169. request.Abort();
  170. }
  171. return null;
  172. }
  173. SendSMSResponseStream = new StreamReader(SendSMSResponse.GetResponseStream(), Encoding.GetEncoding("utf-8"));
  174. string strRespone = SendSMSResponseStream.ReadToEnd();
  175. return strRespone;
  176. }
  177. catch (Exception ex)
  178. {
  179. if (dataStream != null)
  180. {
  181. dataStream.Close();
  182. dataStream.Dispose();
  183. dataStream = null;
  184. }
  185. if (SendSMSResponseStream != null)
  186. {
  187. SendSMSResponseStream.Close();
  188. SendSMSResponseStream.Dispose();
  189. SendSMSResponseStream = null;
  190. }
  191. if (SendSMSResponse != null)
  192. {
  193. SendSMSResponse.Close();
  194. SendSMSResponse = null;
  195. }
  196. if (request != null)
  197. {
  198. request.Abort();
  199. }
  200. }
  201. finally
  202. {
  203. if (dataStream != null)
  204. {
  205. dataStream.Close();
  206. dataStream.Dispose();
  207. dataStream = null;
  208. }
  209. if (SendSMSResponseStream != null)
  210. {
  211. SendSMSResponseStream.Close();
  212. SendSMSResponseStream.Dispose();
  213. SendSMSResponseStream = null;
  214. }
  215. if (SendSMSResponse != null)
  216. {
  217. SendSMSResponse.Close();
  218. SendSMSResponse = null;
  219. }
  220. if (request != null)
  221. {
  222. request.Abort();
  223. }
  224. }
  225. return rs;
  226. }
  227. public static T PostJson<T>(string url, string param, string encoding = "utf-8")
  228. {
  229. ServicePointManager.DefaultConnectionLimit = 300;
  230. CookieContainer cookieContainer = new CookieContainer();
  231. // 设置提交的相关参数
  232. HttpWebRequest request = null;
  233. HttpWebResponse SendSMSResponse = null;
  234. Stream dataStream = null;
  235. StreamReader SendSMSResponseStream = null;
  236. try
  237. {
  238. Encoding myEncoding = Encoding.GetEncoding(encoding);
  239. request = WebRequest.Create(url) as HttpWebRequest;
  240. request.Method = "POST";
  241. request.KeepAlive = false;
  242. request.ServicePoint.ConnectionLimit = 300;
  243. request.AllowAutoRedirect = true;
  244. request.Timeout = 10000;
  245. request.ReadWriteTimeout = 10000;
  246. request.ContentType = "application/json";
  247. request.Accept = "application/xml";
  248. request.Headers.Add("X-Auth-Token", HttpUtility.UrlEncode("OpenStack"));
  249. string strContent = param;
  250. byte[] bytes = myEncoding.GetBytes(strContent);
  251. request.Proxy = null;
  252. request.CookieContainer = cookieContainer;
  253. using (dataStream = request.GetRequestStream())
  254. {
  255. dataStream.Write(bytes, 0, bytes.Length);
  256. }
  257. SendSMSResponse = (HttpWebResponse)request.GetResponse();
  258. if (SendSMSResponse.StatusCode != HttpStatusCode.RequestTimeout)
  259. {
  260. SendSMSResponseStream = new StreamReader(SendSMSResponse.GetResponseStream(), Encoding.GetEncoding("utf-8"));
  261. string response = SendSMSResponseStream.ReadToEnd();
  262. T result = JsonConvert.DeserializeObject<T>(response);
  263. return result;
  264. }
  265. }
  266. catch (Exception e) { }
  267. finally
  268. {
  269. if (dataStream != null) dataStream.Close();
  270. if (SendSMSResponseStream != null) SendSMSResponseStream.Close();
  271. if (SendSMSResponse != null) SendSMSResponse.Close();
  272. if (request != null) request.Abort();
  273. }
  274. return default(T);
  275. }
  276. /// <summary>
  277. /// http下载文件
  278. /// </summary>
  279. /// <param name="url">下载文件地址</param>
  280. /// <param name="file">文件存放地址,包含文件名</param>
  281. /// <param name="progress">回调进度</param>
  282. /// <returns></returns>
  283. public static bool Download(string url, string file, ProgressDelegate.ProgressHandler progress = null, object sender = null)
  284. {
  285. string tempPath = Path.GetDirectoryName(file) + @"\temp";
  286. Directory.CreateDirectory(tempPath); //创建临时文件目录
  287. string tempFile = tempPath + @"\" + Path.GetFileName(file) + ".temp"; //临时文件
  288. if (File.Exists(tempFile))
  289. {
  290. File.Delete(tempFile); //存在则删除
  291. }
  292. try
  293. {
  294. FileStream fs = new FileStream(tempFile, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
  295. // 设置参数
  296. HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
  297. //发送请求并获取相应回应数据
  298. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  299. //直到request.GetResponse()程序才开始向目标网页发送Post请求
  300. Stream responseStream = response.GetResponseStream();
  301. //创建本地文件写入流
  302. //Stream stream = new FileStream(tempFile, FileMode.Create);
  303. byte[] buffer = new byte[100 * 1024];
  304. int readCount = 0;
  305. long filesize = response.ContentLength, current = 0;
  306. while ((readCount = responseStream.Read(buffer, 0, buffer.Length)) > 0)
  307. {
  308. fs.Write(buffer, 0, readCount);
  309. current += readCount;
  310. progress?.Invoke(sender, new ProgressEventArgs(current, filesize));
  311. }
  312. //stream.Close();
  313. fs.Close();
  314. responseStream.Close();
  315. File.Delete(file);
  316. File.Move(tempFile, file);
  317. return true;
  318. }
  319. catch (Exception ex)
  320. {
  321. return false;
  322. }
  323. }
  324. }
  325. }