Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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 }
                    }));
                }
            }
        }
Exemplo n.º 3
0
 /// <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);
         }
     }
 }