初次使用curl模仿登陆成功,有什么不好的地方多多指出。
我要模拟登陆的地址是:http://jwc.wyu.edu.cn/student/
原本学校的教务系统是这样的:
现在我做的模拟登陆界面是这样的:
有没发现少了什么,没错就是验证码没了,我们不用输验证码也能愉快地登录了~~~~~~~~~~~~~
其实模拟登陆并不难,我们来第一步:
获取验证码并保存验证码页面对应的cookie
//获取图片
$judge = getImg("http://jwc.wyu.edu.cn/student/rndnum.asp","image.jpeg");
//第一个参数是验证码生成地址,第二个参数随便,作用是采集验证码的图片并将这张图片保存为image.jpeg
if($judge){//判断图片是否获取成功
$valid = new Valite(); //这里采用了一个自动识别验证码的类
$valid->setImage("image.jpeg");
$valid->getHec();
$validCode = $valid->run();
// echo $validCode;
$CookieFile = $judge; //获取保存好的cookie (用curl_setopt($hander, CURLOPT_COOKIEJAR, $CookieFile);保存的)
}else{
echo "<script>alert('自动获取验证失败');window.location.href='index.html';</script>";
}
这里的验证码自动识别类可查看网址:http://www.poboke.com/study/php-verification-code-identification-primary.html 这里有详解
第二步就是模拟登陆:
在第一步验证码和cookie都已经获取了,剩下就是一些小细节,我先用火狐自带的firebug抓下登陆后的包先
以上的两个图就是我们需要研究的重要信息了,Post信息是必须的,而请求头中的 Referer 也经常需要伪造
$user = $_POST['user'];//获取来自登录界面post过来的账号和密码
$password = $_POST['password'];
$p="UserCode=".$user."&UserPwd=".$password."&Validate=".$validCode."&Submit=提交";//Post信息(必须的)
$ch = curl_init();
// 2. 设置选项,包括URL
$reffer = 'http://jwc.wyu.edu.cn/student/body.htm';
curl_setopt($ch, CURLOPT_REFERER, $reffer); //伪造Referer 请求头中有 复制下来就行了
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0"); //伪造user-agent请求头也有
curl_setopt($ch,CURLOPT_URL, "http://jwc.wyu.edu.cn/student/logon.asp");//这里填的是登录地址了(就是表单登录时action="xxx"提交的地址)
curl_setopt($ch,CURLOPT_COOKIEFILE, $CookieFile);//发送第一步保存好的Cookie
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_POST, 1);//采用POST传值方式
curl_setopt($ch,CURLOPT_POSTFIELDS, $p); //提交Post信息
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true); //防止重定向 不填可能会跳转页面
$s = curl_exec($ch);
curl_close($ch);
第三步:
前面已经模拟登陆进来了,现在可以干你想做的事,抓你想要的信息了,代码贴上
$ch = curl_init();
$reffer = 'http://jwc.wyu.edu.cn/student/menu.asp'; //这里同样是抓包,。。。。。这里就自己抓吧(登录后的自己想要的网址)
curl_setopt($ch, CURLOPT_REFERER, $reffer);//伪造Referer来源
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0");
curl_setopt($ch,CURLOPT_URL, "http://jwc.wyu.edu.cn/student/f4_myscore.asp"); //这里是我想要信息的网址
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch,CURLOPT_COOKIEFILE, $CookieFile);//同时发送Cookie
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
$return = curl_exec($ch);
echo $return;//输出结果
curl_close($ch);
就这样我抓去了下面的信息
呃~~~貌似暴露了自己的智商~~~~~~~到这里就写完了,源码下载地址是:http://yunpan.cn/cmKiR5PX7Eb2w 访问密码 b401