using System; using System.Diagnostics; using System.Drawing; using System.Globalization; using System.IO; using System.Net; using System.Text; namespace FCS.Common { /// /// 网络相关帮助类 /// public class NetHelper { /// /// 请求Url资源 /// /// 目标Url地址 /// 编码规则 /// public static string GetUrlResponse(string url, Encoding encode) { if (!string.IsNullOrWhiteSpace(url) && encode != null) return GetUrlResponse(url, "GET", string.Empty, encode); return string.Empty; } /// /// 请求Url资源 /// /// 目标Url地址 /// 请求方式 /// 请求附加数据 /// public static string GetUrlResponse(string url, string method, string postdata) { if (!string.IsNullOrWhiteSpace(url) && !string.IsNullOrWhiteSpace(method) && !string.IsNullOrWhiteSpace(postdata)) return GetUrlResponse(url, method, postdata, Encoding.UTF8); return string.Empty; } /// /// 请求Url资源 /// /// 目标Url地址 /// 请求方式 /// 请求附加数据 /// 编码规则 /// public static string GetUrlResponse(string url, string method, string postdata, Encoding encode) { Stream responseStream = null; try { HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest; request.Method = method; request.Timeout = 15 * 1000; if (!string.IsNullOrEmpty(postdata)) { byte[] bs = encode.GetBytes(postdata); request.ContentLength = bs.Length; request.ContentType = "application/x-www-form-urlencoded"; using (Stream requestStream = request.GetRequestStream()) { requestStream.Write(bs, 0, bs.Length); } } HttpWebResponse response = request.GetResponse() as HttpWebResponse; if (response.StatusCode == HttpStatusCode.OK) { var contentencode = response.ContentEncoding; if (contentencode == "gzip") responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress); else responseStream = response.GetResponseStream(); using (StreamReader sr = new StreamReader(responseStream, encode)) { var content = sr.ReadToEnd(); return content.Replace("\r\n", string.Empty).Trim(); } } else { Trace.WriteLine($"FCS.Common.NetHelper.GetUrlResponse执行错误,请求地址:{url},状态码:{response.StatusCode},{response.StatusDescription}."); return url+"|lg123456"; } } catch (Exception e) { Trace.WriteLine($"FCS.Common.NetHelper.GetUrlResponse发生异常,请求地址:{url},异常信息{e.Message}."); if (e.Message.Contains("(403)")) { } return url + "|lg123456"; } finally { if (responseStream != null) responseStream.Close(); } } /// /// 保存网络图片 /// /// 网络图片地址 /// 图片保存文件夹 /// 对应URL访问基础地址 /// public static string SaveNetImage(string ImageUrl, string SavePath, string SaveUrl) { return SaveNetImage(ImageUrl, SavePath, SaveUrl, string.Empty); } /// /// 保存网络图片 /// /// 网络图片地址 /// 图片保存文件夹 /// 对应URL访问基础地址 /// 固定文件夹名(用于相同类型图片放在一个文件夹中,可空) /// public static string SaveNetImage(string ImageUrl, string SavePath, string viewUrl, string FixFolderName) { try { HttpWebRequest request = HttpWebRequest.Create(ImageUrl) as HttpWebRequest; request.Method = "GET"; request.Timeout = 5000; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36"; request.KeepAlive = true; request.ProtocolVersion = HttpVersion.Version10; request.Headers.Add("Cookie", "__cfduid=d53136a7fdcb2c4c64f8ed24a66b32f251476954305"); HttpWebResponse response = request.GetResponse() as HttpWebResponse; Image img = Image.FromStream(response.GetResponseStream()); var today = DateTime.Now.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo); var saveFolder = Path.Combine(SavePath, today, FixFolderName); if (!Directory.Exists(saveFolder)) { Directory.CreateDirectory(saveFolder); } var fileExt = Path.GetExtension(ImageUrl).ToLower(); string[] imgExt = new string[] { ".gif", ".jpg", ".jpeg", ".png", ".bmp" }; if (string.IsNullOrWhiteSpace(fileExt) || Array.IndexOf(imgExt, fileExt) == -1) fileExt = ".jpg"; var savefile = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt; img.Save(Path.Combine(saveFolder, savefile)); return UrlCombine(viewUrl, today, FixFolderName, savefile); } catch { } return string.Empty; } /// /// URL路径拼写 /// /// 路径参数列表 /// public static string UrlCombine(params string[] paths) { if (paths == null || paths.Length == 0) { throw new ArgumentNullException("paths"); } StringBuilder sb = new StringBuilder(); string item = string.Empty; for (int i = 0; i < paths.Length; i++) { item = paths[i]; if (item == null) { throw new ArgumentNullException("paths"); } if (item.Length != 0) { if (item.StartsWith("/")) item = item.Substring(1); if (item.IndexOf(".") != -1) { sb.Append(item); } else if (item.EndsWith("/")) sb.Append(item); else sb.Append(item + "/"); } } return sb.ToString(); } } }