C#——作一个简单代理IP池

1、原因。

  抓取数据时,有一些网站 设置了一些反爬虫设置,进而将本身本地 IP 地址拉入系统黑名单。从而达到禁止本地 IP 访问数据的请求。

 

 

2、思路。

  根据其余 代理 IP 网站,进行一个免费的代理 IP 进行搜集,而后进行统一 验证 管理

以下图:html

 

 

3、抓取包含代理 IP 的网站页面。

 

  抓取来网站代码以后,利用 HtmlAgilityPack 进行 html 的解析。并将代理 IP 验证,存放队列等操做。git

 

4、直接看效果图。

  运行效果。

 

 

  

 

 

 

浏览器 请求 :http://127.0.0.1:12306/ 效果。github

 

 

 

就这样,一个简单的  属于本身的 代理 IP 池,就作好了 。。。浏览器

 

放上 关于 HttpListener 监听的代码网站

  

public static void Lisener() { Console.Title = url; HttpListener listerner = new HttpListener(); { listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份验证 Anonymous匿名访问
 listerner.Prefixes.Add(url); listerner.Start(); new Thread(new ThreadStart(delegate { while (true) { HttpListenerContext httpListenerContext = listerner.GetContext(); new Thread(new ThreadStart(delegate { HttpListenerContext ctx = httpListenerContext; try { using (StreamWriter writer = new StreamWriter(ctx.Response.OutputStream)) { ctx.Response.StatusCode = 200; string ipp = ctx.Request.QueryString["ipp"]; if (null != ipp && Regex.IsMatch(ipp, @"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}$")) { Console.WriteLine("{0}> 删除代理{1}", DateTime.Now.ToString("s"), ipp); QueueOperation(new ProxyViewModel() { Id = ipp }, IQueueType.Del); writer.WriteLine("true"); } else { int count = 0; while (true) { if (count > 10) { writer.WriteLine("false"); break; } // 出队已个代理IP对象
                                            var que = QueueOperation(null, IQueueType.DeQueue); if (que.First().Key > 0) { // 判断该代理IP时间在5分钟内产生的直接返回使用
                                                if ((que.First().Value.CreateTime.AddMinutes(5)) > DateTime.Now) { Console.WriteLine("{0}> 直接输出{1}", DateTime.Now.ToString("s"), que.First().Value.Id); // 输出http响应代码
 writer.WriteLine(que.First().Value.Id); QueueOperation(que.First().Value, IQueueType.EnQueue); break; } else { // 验证代理IP有效性
                                                    if (DbVerIp(que.First().Value)) { Console.WriteLine("{0}> 验证输出{1}", DateTime.Now.ToString("s"), que.First().Value.Id); // 输出http响应代码
 writer.WriteLine(que.First().Value.Id); // 退出本次请求
                                                        break; } } } count++; // 队列无可用代理IP状况下等待2秒再获取
                                            Thread.Sleep(TimeSpan.FromSeconds(2)); } } //writer.Close(); //ctx.Response.Close();
 } } catch (Exception ex) { try { Console.WriteLine("{0}> 接口異常:{1}", DateTime.Now.ToString("s"), ex.Message); using (StreamWriter writer = new StreamWriter(ctx.Response.OutputStream)) { ctx.Response.StatusCode = 200; writer.WriteLine("false"); } } catch (Exception e) { } } })).Start(); } })).Start(); } }

 

 

 

 

源码 地址: https://github.com/Yahuiya/Proxyui

 

若是有什么错误的,还请指出,哈哈哈哈哈url

相关文章
相关标签/搜索