Пример #1
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="html"></param>
        protected override void HtmlAnalyse(string html)
        {
            if (string.IsNullOrEmpty(html))
                return;

            //处理列表部分
            Match match = Regex.Match(html, REGEX_PATTERN);
            while (match.Success)
            {
                int p = Convert.ToInt32(match.Groups["p"].Value);
                double t = Convert.ToDouble(match.Groups["t"].Value);
                string ip = match.Groups["ip"].Value.Trim();
                if (t <= 1)
                {
                    ProxyIPNode article = new ProxyIPNode()
                    {
                        Port = p,
                        IP = ip
                    };
                    ResultArticleList.Add(article);
                }
                match = match.NextMatch();
            }
        }
Пример #3
0
        /// <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
                {
                    var 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;
                    return false;
                }
                catch (Exception ex)
                {
                    LogManager.Instance.Error("CheckWebProxy-ProxyIPNode:{0}-ex:{1}", cProxyNode, ex);
                    ex = null;
                    return false;
                }
            }
            return cProxyNode.CanUse;
        }