/// <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(); } }
/// <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); }