> 백엔드 개발 > PHP 튜토리얼 > PHP는 수업 일정을 캡처하기 위해 Founder Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.

PHP는 수업 일정을 캡처하기 위해 Founder Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.

PHPz
풀어 주다: 2018-10-11 17:56:21
원래의
1394명이 탐색했습니다.

Course Grid와 Super Course Timetable은 대학생들이 꼭 알아야 할 두 가지 애플리케이션입니다. 학생 ID와 교육 시스템 비밀번호를 사용하여 언제 어디서나 자신의 수업 시간표를 가져와 휴대폰에서 볼 수 있습니다.

사실 우리가 PHP에 대해 조금만 알면 이와 비슷한 웹 애플리케이션도 만들 수 있습니다.

1. 인증 코드 해결

사실 이것은 Zhengfang의 작은 버그입니다. 로그인 인터페이스에 들어가면 브라우저가 서버에 인증을 생성합니다. 코드 이미지. 이 이미지를 요청하지 않으면 Zhengfang의 배경에서 해당 인증 코드가 생성되지 않으므로 이를 활용할 수 있는 기회가 주어지며 이는 한동안 기쁠 것입니다 ~ 이때는 인증 코드를 입력하지 않고 , 매우 원활하게 들어갈 수 있습니다. 컴퓨터에서 인증 코드 주소에 대한 액세스를 비활성화한 다음 이것이 사실인지 확인해볼 수 있습니다. 물론 이는 긍정적인 당사자에게만 적용됩니다.

2. PHP 컬 시뮬레이션 로그인

다음은 저와 같은 분들이 많을 거라 생각하고 긴 설명은 그냥 돌아서 나가시면 됩니다. . 하지만 이 습관은 여전히 ​​좋지 않습니다... 충분히 말도 안되는 일입니다!

//模拟登陆
  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. 교육행정 시스템 로그인 페이지의 숨겨진 필드

예:

코드는 다음과 같습니다.

이런 것들도 로그인 시 지참해야 합니다. 그런데 기능이 게시되고, 블로거의 학교가 노출됩니다... 왕립농업대학 (주로 정규식 응용)

//登陆页面的隐藏字段  

function getView(){
  $url = 'http://jw.hzau.edu.cn/default2.aspx';
  $result = curl_request($url);
  $pattern = '//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 = '//is';
    preg_match_all($pattern, $result, $matches);
    $res[0] = $matches[1][0];
    return $res[0] ;
  }
로그인 후 복사

4. 쿠키 얻기

function login($xh,$pwd){
    $url = 'http://jw.hzau.edu.cn/default2.aspx';
    $post['__VIEWSTATE'] = $this->getView();
    $post['txtUserName'] = $xh; //填写学号
    $post['TextBox2'] = $pwd; //填写密码
    $post['txtSecretCode'] = '';
    $post['lbLanguage'] = '';
    $post['hidPdrs'] = '';
    $post['hidsc'] = '';
    $post['RadioButtonList1'] = iconv('utf-8', 'gb2312', '学生');
    $post['Button1'] = iconv('utf-8', 'gb2312', '登录');
    $result = curl_request($url,$post,'', 1);
    return $result['cookie'];
  }
로그인 후 복사

5. 일정 함수 형식이 좀 지저분한데 그걸로 하자 수업일정을 2차원 연관배열

//返回课表字符串
private function classresult($xh,$pwd){
    date_default_timezone_set("PRC"); //时区设置
    $classList = "";//声明课表变量
 
    $cookie = $this->login($xh,$pwd);
    $view = $this->getViewJs($cookie,$xh);//验证密码是否正确
 
    //如果密码正确
    if (!empty($view)) {
      $url = "http://jw.hzau.edu.cn/xskbcx.aspx?xh={$xh}";
      $result = curl_request($url,'',$cookie); //保存的cookies
      preg_match_all('/([\w\W]*?)
로그인 후 복사

6으로 변환하고, 빈 교실을 다시 쿼리해 보세요.

//空教室查询结果
  public function roomresult(){
    $xh = ""; //设置学号
    $pwd = ""; //学号对应的密码
 
    $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', '空教室查询');
    $post['__EVENTARGUMENT']='';
    $post['__EVENTTARGET']='';
    $post['__VIEWSTATE'] = $this->getViewJs($cookie,$xh);
    $post['ddlDsz'] = iconv('utf-8', 'gb2312', '单');
    $post['ddlSyXn'] = '2014-2015'; //学年
    $post['ddlSyxq'] = '1';
    $post['jslb'] = '';
    $post['xiaoq'] = '';
 
    $post['kssj']=$_GET['start']; //提交的开始查询时间 
    $post['sjd']=$_GET['class'];//提交的课程节次
 
    $post['xn']='2014-2015';//所在学年
    $post['xq']='2';//所在学期
    $post['xqj']='6';//当天星期几
    $post['dpDataGrid1:txtPageSize']=90;//每页显示条数
 
    $result = curl_request($url,$post,$cookie,0);
     
    preg_match_all('/]+>[^>]+span>/',$result,$out);
    $tip = iconv('gb2312', 'utf-8', $out[0][3]);//获取页面前部的提示内容
    preg_match_all('/([\w\W]*?)/',$result,$out);
    $table = iconv('gb2312', 'utf-8', $out[0][0]); //获取查询列表
     
    $this->load->view("classroom",array('tip'=>$tip,'table'=>$table));
  }
로그인 후 복사

의 기능은 다음과 같이 요약할 수 있습니다. 각 학교의 교육 행정 시스템은 다릅니다. Firefox 브라우저의 방화범 패킷 캡처가 제출되었는지 확인하세요.

위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.

더 많은 관련 튜토리얼을 보려면 초보부터 마스터까지 PHP 프로그래밍에 대한 전체 비디오 튜토리얼 세트

를 방문하세요.
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿