NetHelper.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Net;
  7. using System.Drawing;
  8. using System.Globalization;
  9. using System.Web;
  10. using System.Diagnostics;
  11. namespace SCC.Common
  12. {
  13. /// <summary>
  14. /// 网络相关帮助类
  15. /// </summary>
  16. public class NetHelper
  17. {
  18. /// <summary>
  19. /// 获取IP
  20. /// </summary>
  21. /// <returns></returns>
  22. public static string GetIP()
  23. {
  24. string ip = string.Empty;
  25. if (!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"]))
  26. ip = Convert.ToString(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]);
  27. if (string.IsNullOrEmpty(ip))
  28. ip = Convert.ToString(System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]);
  29. if (string.IsNullOrEmpty(ip))
  30. ip = System.Web.HttpContext.Current.Request.UserHostAddress;
  31. return ip;
  32. }
  33. /// <summary>
  34. /// 通过IP地址获取所属国家,省份,城市
  35. /// </summary>
  36. /// <param name="IP"></param>
  37. /// <returns></returns>
  38. public static List<string> GetCityByIP(string IP)
  39. {
  40. var url = string.Format(@"http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip={0}", IP);
  41. var htmlsource = GetUrlResponse(url, Encoding.GetEncoding("gbk"));
  42. if (!string.IsNullOrWhiteSpace(htmlsource))
  43. {
  44. string[] sarray = htmlsource.Trim().Split(new string[] { "\t" }, StringSplitOptions.RemoveEmptyEntries);
  45. if (sarray.Length == 6)
  46. {
  47. List<string> result = new List<string>();
  48. result.Add(sarray[3]);
  49. result.Add(sarray[4]);
  50. result.Add(sarray[5]);
  51. return result;
  52. }
  53. }
  54. return null;
  55. }
  56. /// <summary>
  57. /// 请求Url资源
  58. /// </summary>
  59. /// <param name="url">目标Url地址</param>
  60. /// <returns></returns>
  61. public static string GetUrlResponse(string url)
  62. {
  63. if (!string.IsNullOrWhiteSpace(url))
  64. return GetUrlResponse(url, Encoding.UTF8);
  65. return string.Empty;
  66. }
  67. /// <summary>
  68. /// 请求Url资源
  69. /// </summary>
  70. /// <param name="url">目标Url地址</param>
  71. /// <param name="encode">编码规则</param>
  72. /// <returns></returns>
  73. public static string GetUrlResponse(string url, Encoding encode)
  74. {
  75. if (!string.IsNullOrWhiteSpace(url) && encode != null)
  76. return GetUrlResponse(url, "GET", string.Empty, encode);
  77. return string.Empty;
  78. }
  79. /// <summary>
  80. /// 请求Url资源
  81. /// </summary>
  82. /// <param name="url">目标Url地址</param>
  83. /// <param name="method">请求方式</param>
  84. /// <param name="postdata">请求附加数据</param>
  85. /// <returns></returns>
  86. public static string GetUrlResponse(string url, string method, string postdata)
  87. {
  88. if (!string.IsNullOrWhiteSpace(url) && !string.IsNullOrWhiteSpace(method) && !string.IsNullOrWhiteSpace(postdata))
  89. return GetUrlResponse(url, method, postdata, Encoding.UTF8);
  90. return string.Empty;
  91. }
  92. /// <summary>
  93. /// 请求Url资源
  94. /// </summary>
  95. /// <param name="url">目标Url地址</param>
  96. /// <param name="method">请求方式</param>
  97. /// <param name="postdata">请求附加数据</param>
  98. /// <param name="encode">编码规则</param>
  99. /// <returns></returns>
  100. public static string GetUrlResponse(string url, string method, string postdata, Encoding encode)
  101. {
  102. Stream responseStream = null;
  103. try
  104. {
  105. HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
  106. request.Method = method;
  107. request.Timeout = 15 * 1000;
  108. if (!string.IsNullOrEmpty(postdata))
  109. {
  110. byte[] bs = encode.GetBytes(postdata);
  111. request.ContentLength = bs.Length;
  112. request.ContentType = "application/x-www-form-urlencoded";
  113. using (Stream requestStream = request.GetRequestStream())
  114. {
  115. requestStream.Write(bs, 0, bs.Length);
  116. }
  117. }
  118. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  119. if (response.StatusCode == HttpStatusCode.OK)
  120. {
  121. var contentencode = response.ContentEncoding;
  122. if (contentencode == "gzip")
  123. responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
  124. else
  125. responseStream = response.GetResponseStream();
  126. using (StreamReader sr = new StreamReader(responseStream, encode))
  127. {
  128. var content = sr.ReadToEnd();
  129. return content.Replace("\r\n", string.Empty).Trim();
  130. }
  131. }
  132. else
  133. {
  134. Trace.WriteLine($"SCC.Common.NetHelper.GetUrlResponse执行错误,请求地址:{url},状态码:{response.StatusCode},{response.StatusDescription}.");
  135. return null;
  136. }
  137. }
  138. catch( Exception e)
  139. {
  140. Trace.WriteLine($"SCC.Common.NetHelper.GetUrlResponse发生异常,请求地址:{url},异常信息{e.Message}.");
  141. return null;
  142. }
  143. finally
  144. {
  145. if (responseStream != null)
  146. responseStream.Close();
  147. }
  148. }
  149. #region 部分彩种自有请求网络数据方法
  150. /// <summary>
  151. /// 请求河南481(泳坛夺金)Url资源
  152. /// </summary>
  153. /// <param name="url">目标Url地址</param>
  154. /// <returns></returns>
  155. public static string GetHeNan481UrlResponse(string url)
  156. {
  157. Stream responseStream = null;
  158. try
  159. {
  160. HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
  161. request.Method = "GET";
  162. request.Timeout = 10000;
  163. CookieContainer container = new CookieContainer();
  164. Cookie cookie = new Cookie("JSESSIONID", "76322438526518B500CEB13023461A22", "/", "www.hnlottery.com.cn");
  165. container.Add(cookie);
  166. request.CookieContainer = container;
  167. request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36";
  168. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  169. var contentencode = response.ContentEncoding;
  170. if (contentencode == "gzip")
  171. responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
  172. else
  173. responseStream = response.GetResponseStream();
  174. using (StreamReader sr = new StreamReader(responseStream, Encoding.GetEncoding("gb2312")))
  175. {
  176. var content = sr.ReadToEnd();
  177. return content.Replace("\r\n", string.Empty).Trim();
  178. }
  179. }
  180. catch
  181. {
  182. }
  183. finally
  184. {
  185. if (responseStream != null)
  186. responseStream.Close();
  187. }
  188. return null;
  189. }
  190. /// <summary>
  191. /// 请求湖北11选5Url资源
  192. /// </summary>
  193. /// <param name="url">目标Url地址</param>
  194. /// <returns></returns>
  195. public static string GetHUB11X5UrlResponse(string url)
  196. {
  197. Stream responseStream = null;
  198. try
  199. {
  200. HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
  201. request.Method = "GET";
  202. request.Timeout = 10000;
  203. request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
  204. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  205. var contentencode = response.ContentEncoding;
  206. if (contentencode == "gzip")
  207. responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
  208. else
  209. responseStream = response.GetResponseStream();
  210. using (StreamReader sr = new StreamReader(responseStream, Encoding.UTF8))
  211. {
  212. var content = sr.ReadToEnd();
  213. return content.Replace("\r\n", string.Empty).Trim();
  214. }
  215. }
  216. catch
  217. {
  218. }
  219. finally
  220. {
  221. if (responseStream != null)
  222. responseStream.Close();
  223. }
  224. return null;
  225. }
  226. /// <summary>
  227. /// 请求山西11选5Url资源
  228. /// </summary>
  229. /// <param name="url">目标Url地址</param>
  230. /// <returns></returns>
  231. public static string GetShanXiTaiYuan11x5UrlResponse(string url)
  232. {
  233. Stream responseStream = null;
  234. try
  235. {
  236. HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
  237. request.Method = "GET";
  238. request.Timeout = 10000;
  239. CookieContainer container = new CookieContainer();
  240. Cookie cookie = new Cookie("JSESSIONID", "F76502A5D6582D7286C9CE7656FDAAEF", "/", "www.sxlottery.net");
  241. container.Add(cookie);
  242. request.CookieContainer = container;
  243. request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36";
  244. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  245. var contentencode = response.ContentEncoding;
  246. if (contentencode == "gzip")
  247. responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
  248. else
  249. responseStream = response.GetResponseStream();
  250. using (StreamReader sr = new StreamReader(responseStream, Encoding.UTF8))
  251. {
  252. var content = sr.ReadToEnd();
  253. return content.Replace("\r\n", string.Empty).Trim();
  254. }
  255. }
  256. catch
  257. {
  258. }
  259. finally
  260. {
  261. if (responseStream != null)
  262. responseStream.Close();
  263. }
  264. return null;
  265. }
  266. /// <summary>
  267. /// 请求重庆快乐十分Url资源
  268. /// </summary>
  269. /// <param name="url">目标Url地址</param>
  270. /// <param name="pageIndex">页码</param>
  271. /// <returns></returns>
  272. public static string GetCQKL10FUrlResponse(string url, int pageIndex)
  273. {
  274. Stream responseStream = null;
  275. try
  276. {
  277. HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
  278. request.Method = "POST";
  279. request.Timeout = 10000;
  280. CookieContainer container = new CookieContainer();
  281. Cookie cookie = new Cookie("ASP.NET_SessionId", "4e0ri0cjp5pyjkigils0wzvy", "/", "buy.cqcp.net");
  282. container.Add(cookie);
  283. request.CookieContainer = container;
  284. request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36";
  285. var postdata = "sPass=BEAB95B0BAA1242CF042D1659686F54B&idMode=9&iType=2&iCount=" + pageIndex;
  286. byte[] bs = Encoding.GetEncoding("gb2312").GetBytes(postdata);
  287. request.ContentLength = bs.Length;
  288. request.ContentType = "application/x-www-form-urlencoded";
  289. using (Stream requestStream = request.GetRequestStream())
  290. {
  291. requestStream.Write(bs, 0, bs.Length);
  292. }
  293. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  294. var contentencode = response.ContentEncoding;
  295. if (contentencode == "gzip")
  296. responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
  297. else
  298. responseStream = response.GetResponseStream();
  299. using (StreamReader sr = new StreamReader(responseStream, Encoding.GetEncoding("gb2312")))
  300. {
  301. var content = sr.ReadToEnd();
  302. return content.Replace("\r\n", string.Empty).Trim();
  303. }
  304. }
  305. catch
  306. {
  307. }
  308. finally
  309. {
  310. if (responseStream != null)
  311. responseStream.Close();
  312. }
  313. return null;
  314. }
  315. /// <summary>
  316. /// 请求百度彩票Url资源
  317. /// </summary>
  318. /// <param name="url">目标Url地址</param>
  319. /// <returns></returns>
  320. public static string GetBaiDuLeCaiResponse(string url)
  321. {
  322. Stream responseStream = null;
  323. try
  324. {
  325. HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
  326. request.Method = "GET";
  327. request.Timeout = 10000;
  328. request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36";
  329. request.Headers.Add("Accept-Encoding", "gzip, deflate, sdch");
  330. request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
  331. request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
  332. CookieContainer container = new CookieContainer();
  333. Cookie cookie = new Cookie("lehecai_request_control_stats", "2", "/", "baidu.lecai.com");
  334. container.Add(cookie);
  335. cookie = new Cookie("_lcas_uuid", "1886243347", "/", "baidu.lecai.com");
  336. container.Add(cookie);
  337. cookie = new Cookie("_lhc_uuid", "sp_587888388668b5.45001252", "/", "baidu.lecai.com");
  338. container.Add(cookie);
  339. request.CookieContainer = container;
  340. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  341. var contentencode = response.ContentEncoding;
  342. if (contentencode == "gzip")
  343. responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
  344. else
  345. responseStream = response.GetResponseStream();
  346. using (StreamReader sr = new StreamReader(responseStream, Encoding.GetEncoding("gb2312")))
  347. {
  348. var content = sr.ReadToEnd();
  349. return content.Replace("\r\n", string.Empty).Trim();
  350. }
  351. }
  352. catch
  353. {
  354. }
  355. finally
  356. {
  357. if (responseStream != null)
  358. responseStream.Close();
  359. }
  360. return null;
  361. }
  362. /// <summary>
  363. /// 请求甘肃11选5Url资源
  364. /// </summary>
  365. /// <param name="url">目标Url地址</param>
  366. /// <returns></returns>
  367. public static string GetGS11X5UrlResponse(string url)
  368. {
  369. Stream responseStream = null;
  370. try
  371. {
  372. HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
  373. request.Method = "GET";
  374. request.Timeout = 10000;
  375. request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36";
  376. request.Headers.Add("Accept-Encoding", "gzip, deflate, sdch");
  377. request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
  378. request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
  379. CookieContainer container = new CookieContainer();
  380. Cookie cookie = new Cookie("sid", "d4cc22d9-9b4c-49d0-8965-61e3fdbe8167", "/", "www.gstc.org.cn");
  381. container.Add(cookie);
  382. request.CookieContainer = container;
  383. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  384. var contentencode = response.ContentEncoding;
  385. if (contentencode == "gzip")
  386. responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
  387. else
  388. responseStream = response.GetResponseStream();
  389. using (StreamReader sr = new StreamReader(responseStream, Encoding.GetEncoding("gb2312")))
  390. {
  391. var content = sr.ReadToEnd();
  392. return content.Replace("\r\n", string.Empty).Trim();
  393. }
  394. }
  395. catch
  396. {
  397. }
  398. finally
  399. {
  400. if (responseStream != null)
  401. responseStream.Close();
  402. }
  403. return null;
  404. }
  405. /// <summary>
  406. /// 请求吉林11选5Url资源
  407. /// </summary>
  408. /// <param name="url">目标Url地址</param>
  409. /// <param name="postdata">传送数据</param>
  410. /// <returns></returns>
  411. public static string GetJL11X5UrlResponse(string url, string postdata)
  412. {
  413. Stream responseStream = null;
  414. try
  415. {
  416. HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
  417. request.Method = "POST";
  418. request.Timeout = 10000;
  419. request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36";
  420. request.Headers.Add("Accept-Encoding", "gzip, deflate, sdch");
  421. request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
  422. request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
  423. request.Referer = "http://jl.lottery.gov.cn/11x5.aspx";
  424. //CookieContainer container = new CookieContainer();
  425. //Cookie cookie = new Cookie("sid", "d4cc22d9-9b4c-49d0-8965-61e3fdbe8167", "/", "www.gstc.org.cn");
  426. //container.Add(cookie);
  427. //request.CookieContainer = container;
  428. byte[] bs = Encoding.UTF8.GetBytes(postdata);
  429. request.ContentLength = bs.Length;
  430. request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
  431. using (Stream requestStream = request.GetRequestStream())
  432. {
  433. requestStream.Write(bs, 0, bs.Length);
  434. }
  435. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  436. var contentencode = response.ContentEncoding;
  437. if (contentencode == "gzip")
  438. responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
  439. else
  440. responseStream = response.GetResponseStream();
  441. using (StreamReader sr = new StreamReader(responseStream, Encoding.UTF8))
  442. {
  443. var content = sr.ReadToEnd();
  444. return content.Replace("\r\n", string.Empty).Trim();
  445. }
  446. }
  447. catch
  448. {
  449. }
  450. finally
  451. {
  452. if (responseStream != null)
  453. responseStream.Close();
  454. }
  455. return null;
  456. }
  457. /// <summary>
  458. /// 从彩票控爬取山西快乐十分开奖资源
  459. /// </summary>
  460. /// <param name="url">彩票控地址</param>
  461. /// <returns></returns>
  462. public static string GetShanXiTaiYuanKL10FResource(string url)
  463. {
  464. Stream responseStream = null;
  465. try
  466. {
  467. HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
  468. request.Method = "GET";
  469. request.Timeout = 10000;
  470. request.Referer = "https://www.baidu.com/link?url=LlPuYDRBAgub8jzVvo8sugb4Js5-NQDPuKAGXZrc-UNS2AiizIzaKJC0C90Jh0rWEK7qargFxEp2lKxQwx1Vxa&wd=&eqid=abe817410018bc0a0000000557393f77";
  471. request.Host = "www.caipiaokong.com";
  472. request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
  473. request.Headers.Add("Accept-Encoding", "gzip, deflate, sdch");
  474. request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
  475. request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36";
  476. request.Headers.Add("Cache-Control", "max-age=0");
  477. request.Headers.Add("Upgrade-Insecure-Requests", "1");
  478. request.Headers.Add("Cookie", "BAIDU_SSP_lcr=https://www.baidu.com/link?url=LlPuYDRBAgub8jzVvo8sugb4Js5-NQDPuKAGXZrc-UNS2AiizIzaKJC0C90Jh0rWEK7qargFxEp2lKxQwx1Vxa&wd=&eqid=abe817410018bc0a0000000557393f77; __cfduid=d506c4c6a0c7f88d91869fa379b2cb1421462343508; caipiaokong_4891_saltkey=MsvISvSd; caipiaokong_4891_lastvisit=1462339908; caipiaokong_4891_caipiaokong_eNr=1; caipiaokong_4891_lastact=1463370823%09index.php%09shxklsf; Hm_lvt_1fa650cb7d8eae53d0e6fbd8aec3eb67=1463369580,1463369608,1463369847,1463370211; Hm_lpvt_1fa650cb7d8eae53d0e6fbd8aec3eb67=1463370839");
  479. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  480. var contentencode = response.ContentEncoding;
  481. if (contentencode == "gzip")
  482. responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
  483. else
  484. responseStream = response.GetResponseStream();
  485. using (StreamReader sr = new StreamReader(responseStream, Encoding.GetEncoding("gb2312")))//.UTF8))
  486. {
  487. var content = sr.ReadToEnd();
  488. return content;
  489. }
  490. }
  491. catch
  492. {
  493. }
  494. finally
  495. {
  496. if (responseStream != null)
  497. responseStream.Close();
  498. }
  499. return string.Empty;
  500. }
  501. #endregion
  502. /// <summary>
  503. /// 保存网络图片
  504. /// </summary>
  505. /// <param name="ImageUrl">网络图片地址</param>
  506. /// <param name="SavePath">图片保存文件夹</param>
  507. /// <param name="SaveUrl">对应URL访问基础地址</param>
  508. /// <returns></returns>
  509. public static string SaveNetImage(string ImageUrl, string SavePath, string SaveUrl)
  510. {
  511. return SaveNetImage(ImageUrl, SavePath, SaveUrl, string.Empty);
  512. }
  513. /// <summary>
  514. /// 保存网络图片
  515. /// </summary>
  516. /// <param name="ImageUrl">网络图片地址</param>
  517. /// <param name="SavePath">图片保存文件夹</param>
  518. /// <param name="viewUrl">对应URL访问基础地址</param>
  519. /// <param name="FixFolderName">固定文件夹名(用于相同类型图片放在一个文件夹中,可空)</param>
  520. /// <returns></returns>
  521. public static string SaveNetImage(string ImageUrl, string SavePath, string viewUrl, string FixFolderName)
  522. {
  523. try
  524. {
  525. HttpWebRequest request = HttpWebRequest.Create(ImageUrl) as HttpWebRequest;
  526. request.Method = "GET";
  527. request.Timeout = 5000;
  528. request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36";
  529. request.KeepAlive = true;
  530. request.ProtocolVersion = HttpVersion.Version10;
  531. request.Headers.Add("Cookie", "__cfduid=d53136a7fdcb2c4c64f8ed24a66b32f251476954305");
  532. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  533. Image img = Image.FromStream(response.GetResponseStream());
  534. var today = DateTime.Now.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo);
  535. var saveFolder = Path.Combine(SavePath, today, FixFolderName);
  536. if (!Directory.Exists(saveFolder))
  537. {
  538. Directory.CreateDirectory(saveFolder);
  539. }
  540. var fileExt = Path.GetExtension(ImageUrl).ToLower();
  541. string[] imgExt = new string[] { ".gif", ".jpg", ".jpeg", ".png", ".bmp" };
  542. if (string.IsNullOrWhiteSpace(fileExt) || Array.IndexOf(imgExt, fileExt) == -1)
  543. fileExt = ".jpg";
  544. var savefile = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt;
  545. img.Save(Path.Combine(saveFolder, savefile));
  546. return UrlCombine(viewUrl, today, FixFolderName, savefile);
  547. }
  548. catch
  549. {
  550. }
  551. return string.Empty;
  552. }
  553. /// <summary>
  554. /// URL路径拼写
  555. /// </summary>
  556. /// <param name="paths">路径参数列表</param>
  557. /// <returns></returns>
  558. public static string UrlCombine(params string[] paths)
  559. {
  560. if (paths == null || paths.Length == 0)
  561. {
  562. throw new ArgumentNullException("paths");
  563. }
  564. StringBuilder sb = new StringBuilder();
  565. string item = string.Empty;
  566. for (int i = 0; i < paths.Length; i++)
  567. {
  568. item = paths[i];
  569. if (item == null)
  570. {
  571. throw new ArgumentNullException("paths");
  572. }
  573. if (item.Length != 0)
  574. {
  575. if (item.StartsWith("/"))
  576. item = item.Substring(1);
  577. if (item.IndexOf(".") != -1)
  578. {
  579. sb.Append(item);
  580. }
  581. else if (item.EndsWith("/"))
  582. sb.Append(item);
  583. else
  584. sb.Append(item + "/");
  585. }
  586. }
  587. return sb.ToString();
  588. }
  589. }
  590. }