您的位置:首页 >新闻资讯 > 正文

基于Redis的Ip代理池设置

来源:互联网 作者:admin 时间:2019-10-09 15:55:59

  代理IP池的设计相信在网上已经有了不少的教程,通常一开始练手,我们都会选择用一些免费的代理IP来做测试。下面ET代理带来基于Redis实现免费的IP代理池教程分享。


基于Redis的Ip代理池设置


  首先设计一个最简单的IpProxy对象:


  ///

  /// Ip代理对象

  ///

  public class IpProxy

  {

  ///

  /// IP地址

  ///

  public string Address { get; set; }

  ///

  /// 端口

  ///

  public int Port { get; set; }

  }

  基于Redis的Ip代理池操作服务

  ///

  /// 基于Redis的代理池管理服务

  ///

  public class PoolManageService

  {

  ///

  /// 从代理池随机获取一条代理

  ///

  ///

  public static string GetProxy()

  {

  string result = string.Empty;

  try

  {

  result = RedisManageService.GetRandomItemFromSet(RedisSetNameEnum.ProxyPool);

  if (result != null)

  {

  if (

  !HttpHelper.IsAvailable(result.Split(new[] { ':' })[0],

  int.Parse(result.Split(new[] { ':' })[1])))

  {

  DeleteProxy(result);

  return GetProxy();

  }

  }

  }

  catch (Exception e)

  {

  LogUtils.ErrorLog(new Exception("从代理池获取代理数据出错", e));

  }

  return result;

  }

  ///

  /// 从代理池删除一条代理

  ///

  ///

  public static void DeleteProxy(string value)

  {

  try

  {

  RedisManageService.RemoveItemFromSet(RedisSetNameEnum.ProxyPool, value);

  }

  catch (Exception e)

  {

  LogUtils.ErrorLog(new Exception("从代理池删除代理数据出错", e));

  }

  }

  ///

  /// 添加一条代理到代理池

  ///

  ///

  public static void Add(IpProxy proxy)

  {

  try

  {

  if (HttpHelper.IsAvailable(proxy.Address, proxy.Port))

  {

  RedisManageService.AddItemToSet(RedisSetNameEnum.ProxyPool, proxy.Address + ":" + proxy.Port.ToString());

  }

  }

  catch (Exception e)

  {

  LogUtils.ErrorLog(new Exception("添加一条代理数据到代理池出错", e));

  }

  }

  }


  我们可以先爬取网络上的一些代理网站免费IP来使用,建立自己的一个代理池来测试使用,这样经过调试,对之后的爬虫工作开展也有好处。


相关文章内容简介