用perl获取可用的代理服务器地址

用perl获取可用的代理服务器地址

对于网速慢,被墙的朋友,你们有福了,我现在把我经常获取可以的代理服务器地址的代码发出来

 

用perl获取可用的代理服务器地址 

 


  1. ##########################################  
  2.  
  3. #获取有效http代理服务器列表程序  
  4.  
  5. #作者:yifangyou  
  6.  
  7. #创建时间:2011-03-27 17:14:00  
  8.  
  9. #本程序实现  
  10.  
  11. #1.从代理网站获取代理服务器列表  
  12.  
  13. #2.逐个检测代理服务器是否可用  
  14.  
  15. ##########################################  
  16.  
  17. package yifangyou;  
  18. use LWP::Simple;  
  19. use LWP::UserAgent;  
  20. use strict;   
  21. use warnings;  
  22. use LWP::Simple qw( $ua get );  
  23. #代理服务器ip和端口存放的地方  
  24.  
  25. my @proxys=();  
  26. #已经检测完的代理服务器ip和端口存放的地方  
  27.  
  28. my @checkedProxys=();  
  29. #已经检测完的代理服务器ip和端口存放的地方,我用的百度首页的图标  
  30.  
  31. my $stdUrl=“http://www.baidu.com/img/baidu_sylogo1.gif”;   
  32. #代理服务器列表页面的url,可以加多个页面  
  33.  
  34. my @urls=(“http://www.5uproxy.net/http_fast.html”);#,“http://www.5uproxy.net/http_anonymous.html”,“http://www.5uproxy.net/http_non_anonymous.html”);  
  35.  
  36. $ua->timeout(3); # 3秒超时  
  37.  
  38. $ua->agent(“Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)”); # 模拟xp ie7浏览器  
  39.  
  40. #获取待验证的代理服务器列表  
  41.  
  42. foreach my $url(@urls){  
  43.     getProxyAddr($url);  
  44. }  
  45. #验证代理服务器列表  
  46.  
  47. foreach my $proxyAddr(@proxys){  
  48.     checkProxyAddr($stdUrl,$proxyAddr);  
  49. }  
  50. #输出所有结果  
  51.  
  52. print join(“,”,@checkedProxys).“\n”;  
  53.  
  54. #获取待验证的代理服务器列表  
  55.  
  56. sub getProxyAddr  
  57. {  
  58.       my $url=shift;  
  59.     my $document = get($url);  
  60.     return print “cannot get $url\n” unless defined $document;  
  61.     my @lines=split(“\n”,$document);  
  62.     my $i=0;  
  63.     my @matches;  
  64.     for($i=0;$i<@lines;$i++){  
  65.         #获取ip  
  66.  
  67.         if(@matches=$lines[$i]=~/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/i) {  
  68.             my $ip=$matches[0];  
  69.             #获取端口  
  70.  
  71.         if(@matches=$lines[$i+1]=~/<td.*>(\d{1,6})<\/td>/i) {  
  72.            my $port=$matches[0];  
  73.            push(@proxys,“$ip:$port”);  
  74.         }   
  75.       }  
  76.     }  
  77. }  
  78.  
  79. #验证代理服务器列表  
  80.  
  81. sub checkProxyAddr{  
  82.     my $url=shift;  
  83.     my $proxyAddr=shift;  
  84.     
  85.   $ua->proxy([‘http’], “http://$proxyAddr”); # 设http代理服务器  
  86.  
  87.   my @headcontent=head($url); #取head比较快  
  88.  
  89.   if(scalar(@headcontent)==0){  
  90. #     print “Could not get head from $proxyAddr\n”;  
  91.  
  92.       return -1;           
  93.   }else{  
  94.           print “$proxyAddr\n”;  
  95.           push(@checkedProxys,“$proxyAddr”);  
  96.           return 0;  
  97.   }      
  98. #    my $ua = new LWP::UserAgent;  
  99.  
  100. # $ua->timeout(3); # 3秒超时  
  101.  
  102. # $ua->proxy([‘http’], “http://$proxyAddr”); # 设http代理服务器  
  103.  
  104. # $ua->agent(“Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)”); # 模拟xp ie7浏览器  
  105.  
  106. # my $req = new HTTP::Request->new(GET => $url);  
  107.  
  108. # my $res = $ua->request($req);  
  109.  
  110. # if ($res->is_success){  
  111.  
  112. #         print “$proxyAddr\n”;  
  113.  
  114. #         push(@checkedProxys,“$proxyAddr”);  
  115.  
  116. #         return 0;  
  117.  
  118. # }else {  
  119.  
  120. #     print “Could not get head from $proxyAddr\n”;  
  121.  
  122. #     return -1;  
  123.  
  124. #    }  
  125.  
  126. } 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110598.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 学习Oracle这一篇就够了

    学习Oracle这一篇就够了配套资料,免费下载链接:https://pan.baidu.com/s/1yjJY3IstA8aMQBPYhWNlCw提取码:qmpd复制这段内容后打开百度网盘手机App,操作更方便哦第一章数据库概述1.1、数据库的好处将数据持久化到本地提供结构化查询功能1.2、数据库的常见概念DB:数据库,存储数据的仓库DBMS:数据库管理系统,又称为数据库软件或者数据库产品,用于创建和管理数据库,常见的有MySQL、Oracle、SQLServerDBS:数据库系统,数据库系统是一个通称

    2022年10月8日
  • vscode搭建react框架(vscode补全js方法)

    文章目录一、安装node二、配置淘宝镜像三、配置vscode(win10)四、全局安装脚手架五、创建项目一、安装node请在官网下载安装:https://nodejs.org/zh-cn/vscode中点击(ctrl+`)调出终端输入指令node-v,能显示版本号,说明node已经装好了输入指令npm-v,能显示版本号,说明npm可以使用了点击链接查看图文教程https://blog.csdn.net/qq_45677671/article/detail

    2022年4月12日
  • IIC通信协议详解

    IIC通信协议详解IIC通信协议详解IIC的概述IIC分为软件IIC和硬件IICIIC通信协议空闲状态开始信号与停止信号开始信号程序:IIC的概述IIC:两线式串行总线,它是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbs以上。时钟线SCL:在通信过程起到控制作用。数据线SDA:用来一位一位的传送数据。IIC分为软件IIC和硬件IIC软件IIC:软件IIC通信指的是用单片机的两个I/O端口模拟出来的IIC,用

    2022年6月10日
  • 雪花算法的原理和实现Java

    雪花算法的原理和实现JavaSnowFlake算法,是Twitter开源的分布式id生成算法。其核心思想就是:使用一个64bit的long型的数字作为全局唯一id。在分布式系统中的应用十分广泛,且ID引入了时间戳,基本上保持自增的。这64个bit中,其中1个bit是不用的,然后用其中的41bit作为毫秒数,用10bit作为工作机器id,12bit作为序列号。…

    2022年7月25日
  • 将字符串指针赋值给数组[通俗易懂]

    比如char*p=”sdflkjasljfsjlsdfsa”;charp1[200];将p赋给p1(1)strcpy(p1,p);(2)char*src=”helloworld”;chardes[100]={0};memcpy(des,src,strlen(src)+1);//void*memcpy(void*str1,const…

    2022年4月12日
  • mysql数据库去重[通俗易懂]

    mysql数据库去重[通俗易懂]2019独角兽企业重金招聘Python工程师标准>>>…

    2022年10月1日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号