この記事では主に創設者学事システムへの模擬ログインをして授業スケジュールを取得するためのPHPに関する情報を紹介します。必要な友人はそれを参照してください。
コースグリッドとスーパーコース時間割は、大学生にとって馴染みのある2つのアプリケーションであり、教育システムの学生IDとパスワードを使用して、いつでもどこでも携帯電話で自分の授業時間割をインポートして表示できます。
実は、phpについて少し知っていれば、これと似たようなWebアプリケーションも作ることができます。
1.認証コードを解決します
実際、これは Zhengfang の小さなバグです。ログイン インターフェイスに入ると、ブラウザがサーバーに要求し、サーバーは確認コード イメージを生成します。この画像をリクエストしない場合、Zhengfangの背景は対応する認証コードを生成しないため、それを利用する機会があり、しばらくの間は幸せになります〜現時点では、認証コードを入力せずに, とてもスムーズに入力できます。コンピュータ上の確認コードのアドレスへのアクセスを無効にして、これが真実かどうかを確認してください~ もちろん、これは肯定的な側にのみ機能します。
2. PHPカールシミュレーションログイン
次は、関連するコードです。多くの人は私と同じように、例だけを見て長い説明を避けていると思います。しかし、この習慣はまだ良くありません。これ以上はナンセンスです。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
//模擬ログイン 関数curl_request($url,$post='',$cookie='', $returnCookie=0){ $curl =curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (互換性; 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)) { curl_error($curl)を返す; } curl_close($curl); if($returnCookie){ list($header, $body) =explode("rnrn", $data, 2); preg_match_all("/Set-Cookie:([^;]*);/", $header, $matches); $info['cookie'] = substr($matches[1][0], 1); $info['content'] = $body; $info を返す; }その他{ $data を返す; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//ログインページの隠しフィールド
関数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];
$res[0] を返す ; } //教室クエリページの非表示値に戻ります プライベート関数 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]; $res[0] を返す ; } |
4. Cookieの取得
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
関数ログイン($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', 'Student'); $post['Button1'] = iconv('utf-8', 'gb2312', 'ログイン'); $result =curl_request($url,$post,'', 1); return $result['cookie']; } |
5. 授業予定表を確認する機能を試してみます 形式がちょっと汚いのでなんとかしましょう 授業予定表を二次元の連想配列に変換してみました。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
//クラススケジュール文字列を返します プライベート関数クラスresult($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) //保存されたクッキー ; preg_match_all('/$table = $out[0][0] //クラス全体のスケジュールを取得します ; preg_match_all('/ | ([wW]*?) | /',$table,$out);
6.空き教室のクエリ機能を再度試してみる
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
//空の教室のクエリ結果 公開関数室result(){ $xh = "" //学生番号を設定します ;$pwd = "" //学生IDに対応するパスワード ;
$cookie = $this->login($xh,$pwd); $url = "http://jw.hzau.edu.cn/xs_main.aspx?xh={$xh}"; $result =curl_request($url,'',$cookie) //保存されたクッキー ;
$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', 'single'); $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('/ $table = iconv('gb2312', 'utf-8', $out[0][0]) //クエリリストを取得します
$this->load->view("教室",array('tip'=>$tip,'table'=>$table)); } |
要約すると以上です。現時点では、Firefox ブラウザの Firebug パケット キャプチャを使用して、提出された内容を確認できます。
以上がこの記事の全内容ですが、皆さんに気に入っていただければ幸いです。