浅谈方正教务模拟登录实现

浅淡方正教务系统模拟登陆

        很多论坛上发布着模拟登陆方正教务系统的文章,随着方正系统的逐步升级,此前代码都已无法实现,笔者摸索登录教务系统,现将模拟登陆中发现的问题一一罗列。模拟登陆通常使用CURL进行模拟登陆操作。以下针对西安工程大学教务系统为例:

首先登录教务系统,网址:http://202.200.206.54/(xcvzkfmkuq2rsufvo51hqmmj)/Default2.aspx。

浅谈方正教务模拟登录实现_第1张图片

我们很容易发现在Default2.aspx前有一段随机码(xcvzkfmkuq2rsufvo51hqmmj),此段随机码为后续模拟抓取成绩很有必要。我们通过抓包发现

 浅谈方正教务模拟登录实现_第2张图片

有以下POST值:

__VIEWSTATE=dDwtMTAzMzQxODQxNTs7Pk6e4%2FuBwXYRApNU4idr2h4qa%2FUF&txtUserName=********&TextBox2=********&txtSecretCode=w72u&RadioButtonList1=%D1%A7%C9%FA&Button1=&lbLanguage=&hidPdrs=&hidsc=

__VIEWSTATE=隐藏字符串,可以通过正则表达式抓取;

txtUserName学号;

TextBox2密码;

txtSecretCode验证码;

RadioButtonList1选择学生;

剩下几个值为空;

利用面向对象思想写的登录块:

Public function login($num,$pw,$check)
{
$login_url='http://202.200.206.54/(xcvzkfmkuq2rsufvo51hqmmj)/Default2.aspx';
$post_fields='__VIEWSTATE=dDwtMTAzMzQxODQxNTs7Pk6e4%2FuBwXYRApNU4idr2h4qa%2FUF&txtUserName='.$this->num.'&TextBox2='.$this->pw.'&txtSecretCode='.$this->check.'&RadioButtonList1=%D1%A7%C9%FA&Button1=&lbLanguage=&hidPdrs=&hidsc=';
$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//0显示,1不显示。也可echo
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_file);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_REFERER, false);
curl_exec($ch);
curl_close($ch);
}


此处应该能够登录成功;抓取成绩的时候,要保证网址中含有(xcvzkfmkuq2rsufvo51hqmmj),否则抓取其他页面将无法抓取;在获取成绩时,post值中viewstates的个别字符已经在提交时被替换,笔者对比相应代码后发现以下替换规则,+替换成%2B/替换成%2f

$this->viewstates=str_replace("+","%2B",$this->viewstates);
$this->viewstates=str_replace("/","%2f",$this->viewstates);


如果不经替换页面会显示“系统正忙”。

以上就是笔者在模拟登陆教务系统抓取成绩遇到的几点问题和解决措施。

欢迎访问笔者的网站:www.goyc.cn  www.i-xp.cn

你可能感兴趣的:(PHP杂谈)