对于一个学生,研究学校网站还是比较有趣滴!
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协议。
赞赏一下