溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

使用php怎么模擬登陸方正教務(wù)系統(tǒng)

發(fā)布時(shí)間:2021-02-03 11:37:46 來(lái)源:億速云 閱讀:233 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

使用php怎么模擬登陸方正教務(wù)系統(tǒng)?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

//模擬登陸
  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, "這里一定要換成教務(wù)系統(tǒng)登陸的url"); //填寫(xiě)教務(wù)系統(tǒng)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,教務(wù)系統(tǒng)登陸頁(yè)面的隱藏字段

    舉個(gè)栗子

復(fù)制代碼 代碼如下:


<input type="hidden" name="__VIEWSTATE" value="dDwyODE2NTM0OTg7Oz61eIbnKVojBioGYtg2vsy2SklwiA==">

    這些東西在登陸的時(shí)候也是需要帶上的,順便貼出函數(shù),順便暴漏了博主的學(xué)?!始曳N地大學(xué)(主要是正則表達(dá)式的運(yùn)用)

//登陸頁(yè)面的隱藏字段  

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] ;
}
  //返回教室查詢(xún)頁(yè)面的隱藏值
  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] ;
  }

  4,cookie 的獲取

function login($xh,$pwd){
    $url = 'http://jw.hzau.edu.cn/default2.aspx';
    $post['__VIEWSTATE'] = $this->getView();
    $post['txtUserName'] = $xh; //填寫(xiě)學(xué)號(hào)
    $post['TextBox2'] = $pwd; //填寫(xiě)密碼
    $post['txtSecretCode'] = '';
    $post['lbLanguage'] = '';
    $post['hidPdrs'] = '';
    $post['hidsc'] = '';
    $post['RadioButtonList1'] = iconv('utf-8', 'gb2312', '學(xué)生');
    $post['Button1'] = iconv('utf-8', 'gb2312', '登錄');
    $result = curl_request($url,$post,'', 1);
    return $result['cookie'];
  }

  5,讓我們來(lái)試試查課表的功能,格式有點(diǎn)亂額,大家湊合著看,我把課表轉(zhuǎn)成了一個(gè)二維關(guān)聯(lián)數(shù)組

//返回課表字符串
private function classresult($xh,$pwd){
    date_default_timezone_set("PRC"); //時(shí)區(qū)設(shè)置
    $classList = "";//聲明課表變量
 
    $cookie = $this->login($xh,$pwd);
    $view = $this->getViewJs($cookie,$xh);//驗(yàn)證密碼是否正確
 
    //如果密碼正確
    if (!empty($view)) {
      $url = "http://jw.hzau.edu.cn/xskbcx.aspx?xh={$xh}";
      $result = curl_request($url,'',$cookie); //保存的cookies
      preg_match_all('/<table id="Table1"[\w\W]*?>([\w\W]*?)<\/table>/',$result,$out);
      $table = $out[0][0]; //獲取整個(gè)課表
 
      preg_match_all('/<td [\w\W]*?>([\w\W]*?)<\/td>/',$table,$out);
      $td = $out[1];
      $length = count($td);
 
      //獲得課程列表
      for ($i=0; $i < $length; $i++) {
        $td[$i] = str_replace("<br>", "", $td[$i]);
 
        $reg = "/{(.*)}/";
       
        if (!preg_match_all($reg, $td[$i], $matches)) {
          unset($td[$i]);
        }
      }
 
      $td = array_values($td); //將課程列表數(shù)組重新索引
      $tdLength = count($td);
      for ($i=0; $i < $tdLength; $i++) {
        $td[$i] = iconv('GB2312','UTF-8',$td[$i]);
      }
 
      //將課表轉(zhuǎn)換成數(shù)組形式
      function converttoTable($table){
        $list = array(
          'sun' => array(
            '1,2' => '',
            '3,4' => '',
            '5,6' => '',
            '7,8' => '',
            '9,10' => ''
          ),
          'mon' => array(
            '1,2' => '',
            '3,4' => '',
            '5,6' => '',
            '7,8' => '',
            '9,10' => ''
          ),
          'tues' => array(
            '1,2' => '',
            '3,4' => '',
            '5,6' => '',
            '7,8' => '',
            '9,10' => ''
          ),
          'wed' => array(
            '1,2' => '',
            '3,4' => '',
            '5,6' => '',
            '7,8' => '',
            '9,10' => ''
          ),
          'thur' => array(
            '1,2' => '',
            '3,4' => '',
            '5,6' => '',
            '7,8' => '',
            '9,10' => ''
          ),
          'fri' => array(
            '1,2' => '',
            '3,4' => '',
            '5,6' => '',
            '7,8' => '',
            '9,10' => ''
          ),
          'sat' => array(
            '1,2' => '',
            '3,4' => '',
            '5,6' => '',
            '7,8' => '',
            '9,10' => ''
          )
        );
        $week = array("sun"=>"周日","mon"=>"周一","tues"=>"周二","wed"=>"周三","thur"=>"周四","fri"=>"周五","sat"=>"周六");
        $order = array('1,2','3,4','5,6','7,8','9,10');
        foreach ($table as $key => $value) {
          $class = $value;
          foreach ($week as $key => $weekDay) {
            $pos = strpos($class,$weekDay);
            // echo $pos;
            if ($pos) {
              $weekArrayDay = $key; //獲取list數(shù)組中的第一維key
              foreach ($order as $key => $orderClass) {
                $pos = strpos($class,$orderClass);
                if ($pos) {
                  $weekArrayOrder = $orderClass; //獲取該課程是第幾節(jié)
                  break;
                }
              }
              break;
            }
          }
          $list[$weekArrayDay][$weekArrayOrder] = $class;
        }
        return $list;
      }
           
      //調(diào)用函數(shù)
      return converttoTable($td);
    }else{
      return 0;
    }
  }

  6,再試試查詢(xún)空教室的功能

//空教室查詢(xún)結(jié)果
  public function roomresult(){
    $xh = ""; //設(shè)置學(xué)號(hào)
    $pwd = ""; //學(xué)號(hào)對(duì)應(yīng)的密碼
 
    $cookie = $this->login($xh,$pwd);
    $url = "http://jw.hzau.edu.cn/xs_main.aspx?xh={$xh}";
    $result = curl_request($url,'',$cookie); //保存的cookies
 
    $url="http://jw.hzau.edu.cn/xxjsjy.aspx?xh={$xh}";
    $post['Button2'] = iconv('utf-8', 'gb2312', '空教室查詢(xún)');
    $post['__EVENTARGUMENT']='';
    $post['__EVENTTARGET']='';
    $post['__VIEWSTATE'] = $this->getViewJs($cookie,$xh);
    $post['ddlDsz'] = iconv('utf-8', 'gb2312', '單');
    $post['ddlSyXn'] = '2014-2015'; //學(xué)年
    $post['ddlSyxq'] = '1';
    $post['jslb'] = '';
    $post['xiaoq'] = '';
 
    $post['kssj']=$_GET['start']; //提交的開(kāi)始查詢(xún)時(shí)間 
    $post['sjd']=$_GET['class'];//提交的課程節(jié)次
 
    $post['xn']='2014-2015';//所在學(xué)年
    $post['xq']='2';//所在學(xué)期
    $post['xqj']='6';//當(dāng)天星期幾
    $post['dpDataGrid1:txtPageSize']=90;//每頁(yè)顯示條數(shù)
 
    $result = curl_request($url,$post,$cookie,0);
     
    preg_match_all('/<span[^>]+>[^>]+span>/',$result,$out);
    $tip = iconv('gb2312', 'utf-8', $out[0][3]);//獲取頁(yè)面前部的提示內(nèi)容
    preg_match_all('/<table[\w\W]*?>([\w\W]*?)<\/table>/',$result,$out);
    $table = iconv('gb2312', 'utf-8', $out[0][0]); //獲取查詢(xún)列表
     
    $this->load->view("classroom",array('tip'=>$tip,'table'=>$table));
  }

看完上述內(nèi)容,你們掌握使用php怎么模擬登陸方正教務(wù)系統(tǒng)的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI