/// <summary> /// 加载或刷新代理ip,当内存没有缓存代理ip时,读磁盘缓存,如果磁盘没缓存 /// 则获取新的代理ip;当缓存的代理ip过时,则再次去获取新的代理ip /// </summary> /// <returns>如果加载或刷新成功返回true</returns> public virtual bool LoadOrRefreshProxyIp() { ProxyUserInfo proxyUserInfo = CurrentProxyUserInfo(); lock (typeof(UseProxyIp)) { if (IpProxyCacheList.Count == 0 && _portProxyCacheList.Count == 0 && _limitDateCacheList.Count == 0) { try { Console.WriteLine($"发现没有缓存的代理ip,从磁盘读取“{ProxyIpCacheFilePath}”缓存信息...."); List <DateTime?> tempLimitDateCacheList = null; if (!Explain(out IpProxyCacheList, out _portProxyCacheList, out tempLimitDateCacheList, File.ReadAllText(ProxyIpCacheFilePath))) { Console.WriteLine("解析缓存信息失败!"); } _limitDateCacheList = tempLimitDateCacheList; } catch (Exception ex) { Console.WriteLine($"读取缓存信息出错", ex); } } Console.WriteLine("检查代理ip是否有效。。。"); if (IpProxyCacheList.Count == 0 || DateTime.Now > _limitDateCacheList[_indexCache % IpProxyCacheList.Count]) { Console.WriteLine($"发送:{proxyUserInfo.GetProxyIpUrl} 获取代理ip"); string retText = HttpWebRequestHelper.HttpGet(proxyUserInfo.GetProxyIpUrl).GetText(); while (CheckNeedAddWhite(retText)) { Console.WriteLine($"获取代理ip时返回:{retText}"); string whiteIp = NetworkHelper.GetOuterNetIP(); Console.WriteLine($"需要添加 {whiteIp} 到白名单。"); string ret = HttpWebRequestHelper.HttpGet(CurrentProxyUserInfo().GetWhiteIpUrl(NetworkHelper.GetOuterNetIP())).GetText(); Console.WriteLine($"添加白名单返回结果:{ret}"); retText = HttpWebRequestHelper.HttpGet(proxyUserInfo.GetProxyIpUrl).GetText(); } retText = AddLimitDate(retText); Console.WriteLine($"获取代理ip结果:{retText}..."); Console.WriteLine("正在解析代理ip...."); List <DateTime?> tempLimitDateCacheList = null; if (Explain(out IpProxyCacheList, out _portProxyCacheList, out tempLimitDateCacheList, retText)) { File.WriteAllText(ProxyIpCacheFilePath, retText); _limitDateCacheList = tempLimitDateCacheList; } else { Console.WriteLine($"解析代理ip出错"); CurrentProxyUserInfo(true); Console.WriteLine($"当前获取代理ip的url已失效,切换到下一个url:'{proxyUserInfo.GetProxyIpUrl}'。"); return(false); } } } return(true); }
/// <summary> /// 微信公众平台专用的图片上传功能 /// </summary> /// <param name="serverId">微信图片服务器端ID</param> /// <param name="pathName">图片保存的路径名称</param> /// <returns></returns> public JsonResult UploadSingleWxImage(string serverId, string pathName) { Image image = HttpWebRequestHelper.HttpGet($"http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=access_token&media_id={serverId}").GetImage(); string imgName = FileHelper.SaveImageBySha1(image, $"{Server.MapPath("~/uploadFiles/")}{pathName}"); using (Image img = Image.FromFile($"{Server.MapPath("~/uploadFiles/")}{pathName}{Path.DirectorySeparatorChar}{imgName}")) { using (Image thumbnailImg = img.GetThumbnailImage(150, img.Height * 150 / img.Width, () => false, IntPtr.Zero)) { string thumbnailName = FileHelper.SaveImageBySha1(thumbnailImg, $"{Server.MapPath("~/uploadFiles/")}{pathName}"); return(MyJson(new Result { code = 0, data = new { thumbnailName = thumbnailName, imgName = imgName, imgWidth = img.Width, imgHeight = img.Height } })); } } }
/// <summary> /// 发送心跳报文,冷却时间为5分钟一次。 /// </summary> public void SendHeartbeat() { if ((DateTime.Now - LastHeartbeatDate).TotalMinutes > 5) { Log.Debug("发送心跳报文..."); try { HeartbeatEntity heartbeatEntity = CrawlerService.GetHeartbeatEntityInfo(); var param = MySignHelper.New(SignKey, SignSecret).Params(); param.Add("RobotMac", NetworkHelper.GetMacAddress()); param.Add("Remark", heartbeatEntity.Remark); param.Add("ExtendField", heartbeatEntity.ExtendField); param.Add("MonitorServer", heartbeatEntity.MonitorServer); string text = HttpWebRequestHelper.HttpGet($"{MonitorServer}HeartbeatEntity/Send", param).GetText(); LastHeartbeatDate = DateTime.Now; } catch (Exception ex) { Log.Error($"发送心跳报文出错,错误原因:{ex.Message}", ex); CrawlerService.HeartbeatException(ex); } } }