江西理工大学正方教务系统查成绩(模拟登录)

l

我写的查成绩快捷通道在树人网公布一个学期了,也应收到大量同校同学的询问,与大量的建议与批评,首先很感谢大家。前两三个月因为在准备软考,与本专业认证考试H3CNA,和这个考试月,一直泡在图书馆,没很多时间来给大家解答,现在考试告一段落,我觉得有必要给大家一点提示,继续二次开发,为江理学子服务。。

江西理工大学正方教务系统查成绩(模拟登录)_第1张图片

博主用的技术是:PHP 5.5.12 及html 、js、bootstrap等前端相关知识。

江西理工大学正方教务系统查成绩(模拟登录)_第2张图片
思路:第一步,用抓包软件,对教务系统的数据交换进行抓包,我用的是fiddle,其他的抓包软件也可。得到
江西理工大学正方教务系统查成绩(模拟登录)_第3张图片
通过上方可知,网页向下一个网页提交了这些有用的数据。、
__VIEWSTATE=dDwyODE2NTM0OTg7Oz7iEDEGZ%2BeDTX%2BFKCGVa2E%2FsMtVbg%3D%3D
&txtUserName=2014****一卡通号
&TextBox2=**密码
&txtSecretCode=h5kr验证码
&RadioButtonList1=%D1%A7%C9%FA gbk编码的“学生”的value 值
还有个就是要保存cookie

首先我们看到txtUserName是我们填写的学号、TextBox2是我们填写的密码、txtSecreCode是我们填写的验证码、RadioButtonList1是我们选择的登陆身份。

那__VIEWSTATE和__VIEWSTATEGENERATOR是从哪里来的呢

既然在这里提交了,那肯定不是凭空产生的,我们来看看登陆界面的源码:
这里写图片描述

获取思路:

 public function login_post($url,&$cookie,$post){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  //不自动输出数据,要echo才行
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  //重要,抓取跳转后数据
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); 
        curl_setopt($ch, CURLOPT_REFERER, 'http://172.16.2.25/');  //重要,302跳转需要referer,可以在Request Headers找到 
        curl_setopt($ch, CURLOPT_POSTFIELDS,$post);  //post提交数据
        $result=curl_exec($ch);
        curl_close($ch);
        return $result;
    }
    //获取
$con1=$this->login_post($url,$this->cookie,'');
        preg_match_all('//', $con1, $view); //获取__VIEWSTATE字段并存到$view数组中

接下来就是处理验证码,这个弄了我好头痛,本来想跳过。但是当时上gittub试了几个大神写的验证码识别类,试了一下,识别成功率不高,为了保险起见。暂时还是需手工输入。我要提醒的是在获取图片时学保存好cookies,POST提交数据是时要一起提交。。

$id=session_id();
    $_SESSION['id']=$id;
    //判断有没有文件夹
    if (!file_exists('cookie/'.date("Ymd")))
        { mkdir ("cookie/".date("Ymd")); }
    if (!file_exists('pic/'.date("Ymd")))
        { mkdir ("pic/".date("Ymd")); }

    $cookie = dirname(__FILE__) . '/cookie/'.date("Ymd").'/'.$_SESSION['id'].'.txt'; //cookie路径  
    $verify_code_url = "http://172.16.2.25/CheckCode.aspx"; //验证码地址
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $verify_code_url);
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie);  //保存cookie
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $img = curl_exec($curl);  //执行curl
    curl_close($curl);
    $fp = fopen("pic/".date("Ymd").'/'.$_SESSION['id'].".gif","w");  //文件名
    fwrite($fp,$img);  //写入文件 
    fclose($fp);

?>

重要的数据已经准备好,接下来就是模拟登录了,就可以登录到教务系统首页了。最好书写成一个类,这样以后代码重用,功能扩展都很方便。关键思路都在这里。


/*  
*   江西理工大学精简化教务模拟登陆类
*   Author:xiethan qq:[email protected]
*/
error_reporting(0);
@header("content-Type: text/html; charset=gbk");
class Login{ 
    public $username;
    public $password;
    public $yzm;
    public $cookie;
    public function __construct($username,$password,$yzm,$cookie)
        { 
            $this->username = $username; 
            $this->password = $password; 
            $this->yzm = $yzm; 
            $this->cookie = $cookie;
        } 

到这里,就可以登录成功了。下面的这个界面的代码就可以成功获取到了。
江西理工大学正方教务系统查成绩(模拟登录)_第4张图片
下一篇,获取成绩……

你可能感兴趣的:(bootstrap,html,php,前端,技术,JS,php)