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