首页 > 开发 > PHP > 正文

php实现模拟登陆方正教务系统抓取课表

2024-05-04 22:36:58
字体:
来源:转载
供稿:网友

课程格子和超级课程表这两个应用,想必大学生都很熟悉,使用自己的学号和教务系统的密码,就可以将自己的课表导入,随时随地都可以在手机上查看。

  其实稍微了解一点php的话,我们也可以做一个类似这样的web 应用。

  1,解决掉验证码

    其实这是正方的一个小bug,当我们进入登陆界面时,浏览器会去请求服务器,服务器会生成一个验证码图片。如果我们不去请求这个图片,那么正方后台也不会生成相应的        验证码,于是这样我们就有了可乘之机,让我高兴会儿~这时,我们在不填写验证码的情况下,可以很流畅的进入。大家可以在自己的电脑上禁止访问验证码的地址,然后试试这        是不是真的~当然,这只对正方有效。

  2,php 的curl 模拟登陆

    接下来就是相关代码了,相信很多人和我一样,只喜欢看例子,对于长篇大论的讲解,转头就走……不过这个习惯还是不好……废话不多说!

//模拟登陆  function curl_request($url,$post='',$cookie='', $returnCookie=0){      $curl = curl_init();      curl_setopt($curl, CURLOPT_URL, $url);      curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');      curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);      curl_setopt($curl, CURLOPT_AUTOREFERER, 1);      curl_setopt($curl, CURLOPT_REFERER, "这里一定要换成教务系统登陆的url"); //填写教务系统url      if($post) {        curl_setopt($curl, CURLOPT_POST, 1);        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));      }      if($cookie) {        curl_setopt($curl, CURLOPT_COOKIE, $cookie);      }      curl_setopt($curl, CURLOPT_HEADER, $returnCookie);      curl_setopt($curl, CURLOPT_TIMEOUT, 20);      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);      $data = curl_exec($curl);      if (curl_errno($curl)) {        return curl_error($curl);      }      curl_close($curl);      if($returnCookie){        list($header, $body) = explode("/r/n/r/n", $data, 2);        preg_match_all("/Set/-Cookie:([^;]*);/", $header, $matches);        $info['cookie'] = substr($matches[1][0], 1);        $info['content'] = $body;        return $info;      }else{        return $data;      }  }

  3,教务系统登陆页面的隐藏字段

    举个栗子

代码如下:
<input type="hidden" name="__VIEWSTATE" value="dDwyODE2NTM0OTg7Oz61eIbnKVojBioGYtg2vsy2SklwiA==">

    这些东西在登陆的时候也是需要带上的,顺便贴出函数,顺便暴漏了博主的学校……皇家种地大学(主要是正则表达式的运用)

//登陆页面的隐藏字段  function getView(){  $url = 'http://jw.hzau.edu.cn/default2.aspx';  $result = curl_request($url);  $pattern = '/<input type="hidden" name="__VIEWSTATE" value="(.*?)" //>/is';  preg_match_all($pattern, $result, $matches);  $res[0] = $matches[1][0];       return $res[0] ;}  //返回教室查询页面的隐藏值  private function getViewJs($cookie,$xh){    $url = "http://jw.hzau.edu.cn/xxjsjy.aspx?xh={$xh}";    $result = curl_request($url,'',$cookie);    $pattern = '/<input type="hidden" name="__VIEWSTATE" value="(.*?)" //>/is';    preg_match_all($pattern, $result, $matches);    $res[0] = $matches[1][0];    return $res[0] ;  }            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表