ホームページ >バックエンド開発 >PHPチュートリアル >PHP は授業スケジュールを取得するために Founder Academic Affairs System への模擬ログインを実装します_PHP チュートリアル

PHP は授業スケジュールを取得するために Founder Academic Affairs System への模擬ログインを実装します_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 09:53:241215ブラウズ

PHPは授業スケジュールを取得するための創立者学事システムへの擬似ログインを実現します

この記事では主に創設者学事システムへの模擬ログインをして授業スケジュールを取得するためのPHPに関する情報を紹介します。必要な友人はそれを参照してください。

コースグリッドとスーパーコース時間割は、大学生にとって馴染みのある2つのアプリケーションであり、教育システムの学生IDとパスワードを使用して、いつでもどこでも携帯電話で自分の授業時間割をインポートして表示できます。

実は、phpについて少し知っていれば、これと似たようなWebアプリケーションも作ることができます。

1.認証コードを解決します

実際、これは Zhengfang の小さなバグです。ログイン インターフェイスに入ると、ブラウザがサーバーに要求し、サーバーは確認コード イメージを生成します。この画像をリクエストしない場合、Zhengfangの背景は対応する認証コードを生成しないため、それを利用する機会があり、しばらくの間は幸せになります〜現時点では、認証コードを入力せずに, とてもスムーズに入力できます。コンピュータ上の確認コードのアドレスへのアクセスを無効にして、これが真実かどうかを確認してください~ もちろん、これは肯定的な側にのみ機能します。

2. PHPカールシミュレーションログイン

次は、関連するコードです。多くの人は私と同じように、例だけを見て長い説明を避けていると思います。しかし、この習慣はまだ良くありません。これ以上はナンセンスです。

?

3. 教育行政システムログインページの非表示フィールド

栗をください

コードをコピーします。コードは次のとおりです:

これらもログイン時に持参する必要があります。 ちなみに、機能が掲載されており、ブロガーの出身校が明らかになります...王立農業大学(主に正規表現の使用)

?

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. 授業予定表を確認する機能を試してみます 形式がちょっと汚いのでなんとかしましょう 授業予定表を二次元の連想配列に変換してみました。

?

/',$table,$out);

$td = $out[1];

$length = count($td);

//コースリストを取得する

for ($i=0; $i $td[$i] = str_replace("
", "", $td[$i]);

$reg = "/{(.*)}/";

if (!preg_match_all($reg, $td[$i], $matches)) {

設定解除($td[$i]);

}

}

$td = array_values($td); //コースリスト配列のインデックスを再作成します

$tdLength = count($td);

for ($i=0; $i <$tdLength; $i++) {

$td[$i] = iconv('GB2312','UTF-8',$td[$i]);

}

//授業スケジュールを配列形式に変換します

関数converttoTable($table){

$list = 配列(

「太陽」 => array(

'1,2' => ”、

'3,4' => ”、

'5,6' => ”、

'7,8' => ”、

「9,10」=>

)、

'モン' =>配列(

'1,2' => ”、

'3,4' => ”、

'5,6' => ”、

'7,8' => ”、

「9,10」=>

)、

'火曜日' =>配列(

'1,2' => ”、

'3,4' => ”、

'5,6' => ”、

'7,8' => ”、

「9,10」=>

)、

「水」=>配列(

'1,2' => ”、

'3,4' => ”、

'5,6' => ”、

'7,8' => ”、

「9,10」=>

)、

「木」 =>配列(

'1,2' => ”、

'3,4' => ”、

'5,6' => ”、

'7,8' => ”、

「9,10」=>

)、

'金曜日' =>配列(

'1,2' => ”、

'3,4' => ”、

'5,6' => ”、

'7,8' => ”、

「9,10」=>

)、

'sat' =>配列(

'1,2' => ”、

'3,4' => ”、

'5,6' => ”、

'7,8' => ”、

「9,10」=>

)

);

$week = array("sun"=>"周日","mon"=>"周一","火"=>"周二","水"=>"周三","木" =>"周四","金"=>"周五","土"=>"周六");

$order = array('1,2','3,4','5,6','7,8','9,10');

foreach ($table as $key => $value) {

$クラス = $値;

foreach ($week as $key => $weekDay) {

$pos = strpos($class,$weekDay);

// echo $pos;

if ($pos) {

$weekArrayDay = $key; //取得リスト数グループ内の最初のキー

foreach ($order as $key => $orderClass) {

$pos = strpos($class,$orderClass);

if ($pos) {

$weekArrayOrder = $orderClass; //获取该课程是第几节

休憩;

}

}

休憩;

}

}

$list[$weekArrayDay][$weekArrayOrder] = $class;

}

$list を返す;

}

//调用関数数

return ConverttoTable($td);

}その他{

0を返す;

}

}

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('/([wW]*?)
/',$result,$out);

$table = $out[0][0] //クラス全体のスケジュールを取得します

;

preg_match_all('/
([wW]*?)

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('/([wW]*?)

/',$result,$out);

$table = iconv('gb2312', 'utf-8', $out[0][0]) //クエリリストを取得します

$this->load->view("教室",array('tip'=>$tip,'table'=>$table));

}

要約すると以上です。現時点では、Firefox ブラウザの Firebug パケット キャプチャを使用して、提出された内容を確認できます。

以上がこの記事の全内容ですが、皆さんに気に入っていただければ幸いです。

www.bkjia.com本当http://www.bkjia.com/PHPjc/1002346.html技術記事この記事では主に、授業スケジュールを取得するための創立者学事システムへのログインをシミュレートするための php の関連情報を紹介します。必要な友人はコースを参照してください...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。