layout: post
title: “PHP爬虫和微信自动投票”
date: 2016-05-17 23:38:25 +0800
comments: true
categories: [php]
今天接触了PHP的模拟登陆和爬虫实战,涉及到了PHP获取远程文件的几种方式,防采集的一些方法,以及微信自动投票实战。
PHP获取远程文件
PHP获取远程文件主要有以下几种方式:
- fopen
- file_get_centents
- socket
- curl
过几天我们在结合实际代码分析这几种方式
防采集的一些方法
防采集的方法有很多,这里主要列出几种比较有效的
- 短时间访问次数限制
- ip校验
- 机器特征校验
- 复杂加密
- 混淆代码
微信自动投票工具
这次主要分析这个。
首先,我们需要将微信投票界面分析到PC端,并用浏览器F12里的功能抓取到投票的请求地址和返回数据。如下:
http://wx.asplay.cn/index.php?g=Wap&m=Vote&a=index&token=jdfsam1432614294&wecha_id=oQIrdjjmrAZXwKOh3Y6-1HeuwvEc&id=27&sgssz=mp.weixin.qq.comhttp://wx.asplay.cn/index.php?
g=Wap&
m=Vote&
a=index& //ThinkPHP里面一些参数
token=jdfsam1432614294& //当前主用户标示
wecha_id=oQIrdjjmrAZXwKOh3Y6-1HeuwvEc&
id=27& //当前投票ID
sgssz=mp.weixin.qq.com
下面是请求的地址:
http://wx.asplay.cn/index.php?g=Wap&m=Vote&a=add_vote&token=jdfsam1432614294&wecha_id=oQIrdjjArAZYwKOh3Y6-1HeuwvEc
发送的数据:
wecha_id=oQIrdjjArAZYwKOh3Y6-1HeuwvEc&tid=27&chid=53%2C&token=jdfsam1432614294&action=add_vote、
投票成功返回的数据:
{“success”:1,”token”:”jdfsam1432614294″,”wecha_id”:”oQIrdjjArAZYwKOh3Y6-1HeuwvEc”,”tid”:”27″,”chid”:”53″,”arrpre”:{“53″:33.33,”54″:0,”55″:0,”56”:66.67}}
基于以上的这些信息,我们就能自己模拟POST的数据,和用户标示了。但是仅仅做到这些是不够的,我们还需要模拟微信的内核。
微信内核的ua://网上能找到
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.158888800.95 Safari/537.36 SE 2.X MetaSr 1.0
debug = 0;
$this->ua = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.158888800.95 Safari/537.36 SE 2.X MetaSr 1.0'; //这里模拟微信内核
$this->cookiejar = 'cookie.txt';
$this->cookiefile = 'cookie.txt';
}
/****************************
*get 请求资源
*@param string 地址
*@param string referer
*@param boolen 是否返回头部
*@param array 头部附加cookie
****************************/
function httpget($url,$referer='',$withhead=0){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_COOKIEJAR,$this->cookiejar);
curl_setopt($ch,CURLOPT_COOKIEFILE,$this->cookiefile);
curl_setopt($ch,CURLOPT_HEADER,$withhead);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
//curl_setopt($ch,CURLOPT_AUTOREFERER,1);
curl_setopt($ch,CURLOPT_USERAGENT,$this->ua);
curl_setopt($ch,CURLOPT_REFERER,$referer);
$r = curl_exec($ch);
if($this->debug){
echo '';
var_dump(curl_getinfo($ch));
}
curl_close($ch);
return $r;
}
/****************************
*post 请求资源
*@param string 地址
*@param string referer
*@param array 提交数据
*@param boolen 是否返回头部
****************************/
function httppost($url,$referer='',$postdata=array(),$withhead=0){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_HEADER,$withhead);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
//curl_setopt($ch,CURLOPT_AUTOREFERER,1);
curl_setopt($ch,CURLOPT_COOKIEJAR,$this->cookiejar);
curl_setopt($ch,CURLOPT_COOKIEFILE,$this->cookiefile);
curl_setopt($ch,CURLOPT_USERAGENT,$this->ua);
curl_setopt($ch,CURLOPT_REFERER,$referer);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postdata);
$r = curl_exec($ch);
if($this->debug){
echo '';
var_dump(curl_getinfo($ch));
}
curl_close($ch);
return $r;
}
}
网上的cURL方法,我们这里有要用到
微信自动投票工具
这是微信自动投票工具";
$jkxy = new curlajax();
$jkxy->debug = 0;
$jkxy->cookiejar = dirname(__FILE__).'\cookie1.txt';
$jkxy->cookiefile = dirname(__FILE__).'\cookie1.txt';
/*模拟提交信息*/
$username="oQIrdjj".rand(500,50000)."wKOh3Y6-1HeuwvEc";//用随机数来产生不同的用户ID
$data = "wecha_id=".$username."&tid=27&chid=53%2C&token=jdfsam1432614294&action=add_vote";//模拟不同的用户提交的数据
$url = 'http://wx.asplay.cn/index.php?g=Wap&m=Vote&a=add_vote&token=jdfsam1432614294&wecha_id='.$username;
$r = $jkxy->httppost($url,$url,$data,0);//获取返回数据
if(checkstr($r,'"success":1')==true){ //根据返回的数据判断是否投票成功
echo "投票成功";
}
else{
echo "投票失败";
}
/****************************
*检查$needle中是否含有$findstr
*@param string needle
*@param string findstr
****************************/
function checkstr($needle,$findstr){
$tempstr=explode($findstr,$needle);
if($tempstr>1){
return true;
}
else{
return false;
}
}
?>
通过这个实战,感觉突然打开了一扇大门。要仔细研究下爬虫的相关知识了。