从网页提取代理服务器并验证是否可用

提取http://cn-proxy.com/提供的代理服务器,然后尝试连接一下检查是否可用。
需要使用sockets模块。

刷东西什么的,最好用了。

[1].[文件] test.php ~ 2KB    下载(3) 跳至 [1]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
include 'simple_html_dom.php' ;
 
//ini_set('default_socket_timeout', 2);
 
$url = 'http://cn-proxy.com/' ;
 
$html = file_get_html( $url );
 
$ret = $html ->find( 'table.sortable tr' );
 
//echo 'count(ip):', count($ret), PHP_EOL;
 
$ips = array ();
 
foreach ( $ret as $key => $value )
{
     $tds = $value ->find( 'td' );
     if ( count ( $tds ) < 2)
     {
         continue ;
     }
     $ip = $tds [0]->innertext;
     $port = $tds [1]->innertext;
     
     if (filter_var( $ip , FILTER_VALIDATE_IP))
     {
         $ips [] = array ( 'ip' => $ip , 'port' => $port );
     }
}
 
//var_dump($ips);
 
echo '找到代理' , count ( $ips ), '个.' , PHP_EOL;
 
$validate = array ();
 
foreach ( $ips as $value )
{
     if (checkProxy( $value [ 'ip' ], $value [ 'port' ]))
     {
         $validate [] = $value ;
     }
}
 
echo '可用代理' , count ( $validate ), '个' , PHP_EOL;
 
foreach ( $validate as $value )
{
     visit( $value [ 'ip' ], $value [ 'port' ], 'http://www.actself.me/' );
}
 
echo 'done.' , date ( 'Y-m-d H:i:s' ) , PHP_EOL;
 
function checkProxy( $ip , $port )
{
     echo '验证 ' , $ip , ":" , $port , ' ' , date ( 'Y-m-d H:i:s' );
     $fd = @stream_socket_client( 'tcp://' . $ip . ':' . $port , $errno , $errstr , 2);
     
     echo $fd !== false ? ' 可用' : ' 不可用' ;
     echo date ( 'Y-m-d H:i:s' ), PHP_EOL;
 
     if ( $fd !== false)
     {
         fclose( $fd );
         return true;
     }
     /*
     $fd = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
     if($fd === false)
     {  
         echo 'socket_create failed.', PHP_EOL;
         return false;
     }
     $ret = socket_connect($fd, $ip, $port);
     socket_close($fd);
     */
     return false;
}
 
function visit( $ip , $port , $url )
{
     $h = curl_init( $url );
     //curl_setopt($h, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
     curl_setopt( $h , CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
     //curl_setopt($h, CURLOPT_PROXY, '127.0.0.1:1080');
     curl_setopt( $h , CURLOPT_PROXY, $ip . ':' . $port );
     curl_setopt( $h , CURLOPT_CONNECTTIMEOUT, 2);
     curl_setopt( $h , CURLOPT_TIMEOUT, 6);
     curl_setopt( $h , CURLOPT_RETURNTRANSFER, true);
 
     $ret = curl_exec( $h );
 
     echo $ret === false ? 'curl exec failed.' : 'curl exec successed.' ;
     echo PHP_EOL;
     if ( $ret === false)
     {
         echo curl_error( $h ), PHP_EOL;
     }
 
     curl_close( $h );
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值