NetHelper.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. using System;
  2. using System.Diagnostics;
  3. using System.Drawing;
  4. using System.Globalization;
  5. using System.IO;
  6. using System.Net;
  7. using System.Text;
  8. namespace FCS.Common
  9. {
  10. /// <summary>
  11. /// 网络相关帮助类
  12. /// </summary>
  13. public class NetHelper
  14. {
  15. /// <summary>
  16. /// 请求Url资源
  17. /// </summary>
  18. /// <param name="url">目标Url地址</param>
  19. /// <param name="encode">编码规则</param>
  20. /// <returns></returns>
  21. public static string GetUrlResponse(string url, Encoding encode)
  22. {
  23. if (!string.IsNullOrWhiteSpace(url) && encode != null)
  24. return GetUrlResponse(url, "GET", string.Empty, encode);
  25. return string.Empty;
  26. }
  27. /// <summary>
  28. /// 请求Url资源
  29. /// </summary>
  30. /// <param name="url">目标Url地址</param>
  31. /// <param name="method">请求方式</param>
  32. /// <param name="postdata">请求附加数据</param>
  33. /// <returns></returns>
  34. public static string GetUrlResponse(string url, string method, string postdata)
  35. {
  36. if (!string.IsNullOrWhiteSpace(url) && !string.IsNullOrWhiteSpace(method) && !string.IsNullOrWhiteSpace(postdata))
  37. return GetUrlResponse(url, method, postdata, Encoding.UTF8);
  38. return string.Empty;
  39. }
  40. /// <summary>
  41. /// 请求Url资源
  42. /// </summary>
  43. /// <param name="url">目标Url地址</param>
  44. /// <param name="method">请求方式</param>
  45. /// <param name="postdata">请求附加数据</param>
  46. /// <param name="encode">编码规则</param>
  47. /// <returns></returns>
  48. public static string GetUrlResponse(string url, string method, string postdata, Encoding encode)
  49. {
  50. Stream responseStream = null;
  51. try
  52. {
  53. HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
  54. request.Method = method;
  55. request.Timeout = 15 * 1000;
  56. if (!string.IsNullOrEmpty(postdata))
  57. {
  58. byte[] bs = encode.GetBytes(postdata);
  59. request.ContentLength = bs.Length;
  60. request.ContentType = "application/x-www-form-urlencoded";
  61. using (Stream requestStream = request.GetRequestStream())
  62. {
  63. requestStream.Write(bs, 0, bs.Length);
  64. }
  65. }
  66. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  67. if (response.StatusCode == HttpStatusCode.OK)
  68. {
  69. var contentencode = response.ContentEncoding;
  70. if (contentencode == "gzip")
  71. responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
  72. else
  73. responseStream = response.GetResponseStream();
  74. using (StreamReader sr = new StreamReader(responseStream, encode))
  75. {
  76. var content = sr.ReadToEnd();
  77. return content.Replace("\r\n", string.Empty).Trim();
  78. }
  79. }
  80. else
  81. {
  82. Trace.WriteLine($"FCS.Common.NetHelper.GetUrlResponse执行错误,请求地址:{url},状态码:{response.StatusCode},{response.StatusDescription}.");
  83. return url+"|lg123456";
  84. }
  85. }
  86. catch (Exception e)
  87. {
  88. Trace.WriteLine($"FCS.Common.NetHelper.GetUrlResponse发生异常,请求地址:{url},异常信息{e.Message}.");
  89. if (e.Message.Contains("(403)"))
  90. {
  91. }
  92. return url + "|lg123456";
  93. }
  94. finally
  95. {
  96. if (responseStream != null)
  97. responseStream.Close();
  98. }
  99. }
  100. /// <summary>
  101. /// 保存网络图片
  102. /// </summary>
  103. /// <param name="ImageUrl">网络图片地址</param>
  104. /// <param name="SavePath">图片保存文件夹</param>
  105. /// <param name="SaveUrl">对应URL访问基础地址</param>
  106. /// <returns></returns>
  107. public static string SaveNetImage(string ImageUrl, string SavePath, string SaveUrl)
  108. {
  109. return SaveNetImage(ImageUrl, SavePath, SaveUrl, string.Empty);
  110. }
  111. /// <summary>
  112. /// 保存网络图片
  113. /// </summary>
  114. /// <param name="ImageUrl">网络图片地址</param>
  115. /// <param name="SavePath">图片保存文件夹</param>
  116. /// <param name="viewUrl">对应URL访问基础地址</param>
  117. /// <param name="FixFolderName">固定文件夹名(用于相同类型图片放在一个文件夹中,可空)</param>
  118. /// <returns></returns>
  119. public static string SaveNetImage(string ImageUrl, string SavePath, string viewUrl, string FixFolderName)
  120. {
  121. try
  122. {
  123. HttpWebRequest request = HttpWebRequest.Create(ImageUrl) as HttpWebRequest;
  124. request.Method = "GET";
  125. request.Timeout = 5000;
  126. request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36";
  127. request.KeepAlive = true;
  128. request.ProtocolVersion = HttpVersion.Version10;
  129. request.Headers.Add("Cookie", "__cfduid=d53136a7fdcb2c4c64f8ed24a66b32f251476954305");
  130. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  131. Image img = Image.FromStream(response.GetResponseStream());
  132. var today = DateTime.Now.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo);
  133. var saveFolder = Path.Combine(SavePath, today, FixFolderName);
  134. if (!Directory.Exists(saveFolder))
  135. {
  136. Directory.CreateDirectory(saveFolder);
  137. }
  138. var fileExt = Path.GetExtension(ImageUrl).ToLower();
  139. string[] imgExt = new string[] { ".gif", ".jpg", ".jpeg", ".png", ".bmp" };
  140. if (string.IsNullOrWhiteSpace(fileExt) || Array.IndexOf(imgExt, fileExt) == -1)
  141. fileExt = ".jpg";
  142. var savefile = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt;
  143. img.Save(Path.Combine(saveFolder, savefile));
  144. return UrlCombine(viewUrl, today, FixFolderName, savefile);
  145. }
  146. catch
  147. {
  148. }
  149. return string.Empty;
  150. }
  151. /// <summary>
  152. /// URL路径拼写
  153. /// </summary>
  154. /// <param name="paths">路径参数列表</param>
  155. /// <returns></returns>
  156. public static string UrlCombine(params string[] paths)
  157. {
  158. if (paths == null || paths.Length == 0)
  159. {
  160. throw new ArgumentNullException("paths");
  161. }
  162. StringBuilder sb = new StringBuilder();
  163. string item = string.Empty;
  164. for (int i = 0; i < paths.Length; i++)
  165. {
  166. item = paths[i];
  167. if (item == null)
  168. {
  169. throw new ArgumentNullException("paths");
  170. }
  171. if (item.Length != 0)
  172. {
  173. if (item.StartsWith("/"))
  174. item = item.Substring(1);
  175. if (item.IndexOf(".") != -1)
  176. {
  177. sb.Append(item);
  178. }
  179. else if (item.EndsWith("/"))
  180. sb.Append(item);
  181. else
  182. sb.Append(item + "/");
  183. }
  184. }
  185. return sb.ToString();
  186. }
  187. }
  188. }