对于一个学生,研究学校网站还是比较有趣滴!
Talk is cheap!Then I show the code.
//登录之前先获取cookie及lt(一次性使用,lt很关键)
function GetCookie(){
//cookie的地址
$cookie=dirname(__FILE__).'/cookie.txt';
//curl来模拟登陆一次教务网站获取返回的页面代码
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://cas.hdu.edu.cn/cas/login');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res=curl_exec($ch);
curl_close($ch);
//用正则匹配到代码里的lt存起来
$preg = '|<input type="hidden" name="lt" value=[\"](.*?)[\"] />|U';
preg_match_all($preg, $res, $arr);
$lt=$arr[1][0];
//把lt存在session里
$_SESSION['lt']=$lt;
//带着刚才的cookie在curl一次验证码的网站得到验证码图片
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://cas.hdu.edu.cn/cas/Captcha.jpg');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data=curl_exec($ch);
curl_close($ch);
//获取时间(为确保验证码唯一性)
$time=time();
//把验证码保存成jpg
file_put_contents(dirname(__FILE__).'/yzm/'.$time.'.jpg',$data);
//为了方便这里返回时间
return $time;
}
//验证是否登录成功
function VerLogin($username,$password,$yzm){
//cookie路径
$cookie=dirname(__FILE__).'/cookie.txt';
//获取在session里的lt
$lt=$_SESSION['lt'];
//构造post内容
$post_data=array(
'encodedService'=>'http%3a%2f%2fi.hdu.edu.cn%2fdcp%2findex.jsp',
'service'=>'http://i.hdu.edu.cn/dcp/index.jsp',
'serviceName'=>'null',
'loginErrCnt'=>'0',
'username'=>$username,
'password'=>md5($password),
'lt'=>$lt,
'captcha'=>$yzm
);
//带着cookie模拟登陆(为了防止被认出来构造的比较完整,嘻嘻)
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://cas.hdu.edu.cn/cas/login");
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl,CURLOPT_REFERER,'http://cas.hdu.edu.cn/cas/login?service=http%3A%2F%2Fi.hdu.edu.cn%2Fdcp%2Findex.jsp');
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36');
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post_data));
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
$res=curl_exec($curl);
curl_close($curl);
//得到一个自带跳转的页面的代码(跳转过去就是登陆后的主页面了哦)
//用正则匹配跳转,如果有则返回成功,没则返回失败
preg_match_all('/window.location.href=[\"](.*)[\"]/i', $res, $results);
if($results[1][0]==null){
return false;
}else{
return true;
}
}
//使用函数
//获取cookie
$time=GetCookie();
//下面是验证码图片路径,根据图片得到正确验证码
//$Imgdir=dirname(__file__)."/yzm/".$time.".jpg";
//根据得到的验证码加上学号密码登录
$stuid="15******";
$password="********";
$yzm="****";
if(VerLogin($stuid,$password,$yzm)){
echo "登录成功";
}else{
echo "登录失败";
}
个人推荐使用的是fiddler来抓包,其他的网页的登陆也可以用相同的思路来研究。
版权声明:本文为原创文章,转载请注明出处和作者,不得用于商业用途,请遵守
CC BY-NC-SA 4.0协议。
赞赏一下
支付宝打赏
微信打赏