示例#1
0
        /// <summary>
        ///     分析
        /// </summary>
        /// <param name="html"></param>
        protected override void HtmlAnalyse(string html)
        {
            if (string.IsNullOrEmpty(html))
            {
                return;
            }

            //处理列表部分
            var match = Regex.Match(html, REGEX_PATTERN);

            while (match.Success)
            {
                var p  = Convert.ToInt32(match.Groups["p"].Value);
                var t  = Convert.ToDouble(match.Groups["t"].Value);
                var ip = match.Groups["ip"].Value.Trim();
                if (t <= 1)
                {
                    var article = new ProxyIPNode
                    {
                        Port = p,
                        IP   = ip
                    };
                    ResultArticleList.Add(article);
                }
                match = match.NextMatch();
            }
        }
示例#2
0
        /// <summary>
        ///     强制过期某代理
        /// </summary>
        /// <param name="cProxyNode"></param>
        public static void ForcedExpiration(WebProxy cProxy)
        {
            if (cProxy == null)
            {
                return;
            }

            var cProxyNode = new ProxyIPNode
            {
                IP   = cProxy.Address.Host,
                Port = cProxy.Address.Port
            };

            cProxyNode.CanUse = false;
            _webProxyIPList.Remove(cProxyNode);
        }
        /// <summary>
        /// 判断当前代理的健康性
        /// </summary>
        /// <param name="cProxyNode">当前代理节点</param>
        /// <returns></returns>
        /// <remarks>
        /// 判断代理是否可用下载'新浪网公司'简介页面,并判断是否有'新浪网'字样
        /// </remarks>
        public static bool CheckWebProxy(ProxyIPNode cProxyNode)
        {
            if (cProxyNode == null)
            {
                return(false);
            }

            if (!cProxyNode.CheckExpired)
            {
                return(cProxyNode.CanUse);
            }

            lock (cProxyNode)
            {
                if (!cProxyNode.CheckExpired)
                {
                    return(cProxyNode.CanUse);
                }

                try
                {
                    WebProxy cProxy = new WebProxy(cProxyNode.IP, cProxyNode.Port);
                    //INFO 判断当前代理健康, 去下载新浪网站一个页面
                    var checkHtml = RequestHelper.DownLoadHtml("http://corp.sina.com.cn/chn/sina_index.html", null, null, 500, cProxy);
                    cProxyNode.LastCheckDate = DateTime.Now;
                    if (!string.IsNullOrEmpty(checkHtml) &&
                        checkHtml.IndexOf("新浪") > -1)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                catch (Exception ex)
                {
                    LogManager.Instance.Error("CheckWebProxy-ProxyIPNode:{0}-ex:{1}", cProxyNode, ex);
                    ex = null;
                    return(false);
                }
            }
            return(cProxyNode.CanUse);
        }