现在网上有一大堆代理IP网站,付费就能提供API接口,并输出他们扫描到的有效代理给我们使用,但是他们输出的很多代理IP,其实并不一定能使用。这个时候就需要我们进行二次有效性验证,如果一条条验证那效率很低,这个时候还需要能批量进行验证。PHP支持curl_multi批量CURL方法。可以使用这个进行验证
代码参考如下:
public function check_proxy_ip_info(){
$url='http://api.66daili.cn/API/GetCommonProxy/';
$html= file_get_contents($url);
$array=explode("\n",$html);
$timeout=10;//设置超时时间为10秒
$res = array();
$mh = curl_multi_init();
foreach($array as $k=>$proxy_ip){
$url='http://www.baidu.com';
$conn[$k]=curl_init($url);
curl_setopt($conn[$k], CURLOPT_TIMEOUT, $timeout);
curl_setopt($conn[$k], CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($conn[$k], CURLOPT_MAXREDIRS, 7);
curl_setopt($conn[$k], CURLOPT_HEADER, 0);
curl_setopt($conn[$k], CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($conn[$k],CURLOPT_RETURNTRANSFER,1);
curl_setopt($conn[$k],CURLOPT_ENCODING, 'gzip,deflate'); // 解码压缩文件
curl_setopt($conn[$k],CURLOPT_SSL_VERIFYPEER, false); //不验证证SSL书
curl_setopt($conn[$k],CURLOPT_SSL_VERIFYHOST, false); //不验证SSL证书
curl_setopt($conn[$k],CURLOPT_PROXYTYPE, CURLPROXY_HTTP);//使用代理访问
curl_setopt($conn[$k],CURLOPT_PROXY, $proxy_ip);//使用代理访问
curl_multi_add_handle ($mh,$conn[$k]);
}
$active = null;
do{
$mrc = curl_multi_exec($mh,$active);
}while($mrc == CURLM_CALL_MULTI_PERFORM);
while($active && $mrc == CURLM_OK){
if(curl_multi_select($mh) != -1){
do{
$mrc = curl_multi_exec($mh, $active);
}while($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
foreach ($array as $k => $url) {
curl_error($conn[$k]);
$res[$k]=curl_multi_getcontent($conn[$k]);
if (strstr($res[$k], '百度')) {
echo $url."有效<BR>";
}
$header[$k]=curl_getinfo($conn[$k]);
curl_multi_remove_handle($mh, $conn[$k]);
curl_close($conn[$k]);
}
curl_multi_close($mh);
//print_r( $res);
}
这样就能自动读取来自代理网站的API接口输出的代理IP,并自动验证,有效的自动显示有效
感谢您的来访,获取更多精彩文章请收藏本站。
© 版权声明
THE END
暂无评论内容