phpシミュレーション登録レポート

5814 ワード

phpを習い始めたら、phpで授業表をつかんでみたいです.インターネットで何人かの経験紹介を見て、試しに作ってみました.いくつかの文章の時間が長くなりましたので、実験は成功しませんでした.そして自分で考えてみて、一つを作ってもいいです.今日は分かち合います
まず学校の教務システムに登録されているURL(例えば:http://210.44.159.22/default2.aspx)その後、私達の学校のシステムは検証コードを迂回したバグを修復しましたので、まだ検証コードを記入する必要があります.したがって、コードアドレスを検証する必要があります.http://210.44.159.22/CheckCode.aspx)
住所を知ったら、chromeブラウザでF 12を押してデバッグモードを開けて、networkをクリックして、ログインを見て、具体的にそれらのデータ段を提出しました.

ここで提出されたデータを見ることができます.txtUserNameは学籍番号です.textBox 2はあなたが提出したパスワードです.そして、ウェブページのソースコードを調べてみます.VIEWSTATEは隠しフィールドです.Radio Button List 1は学生です.これを知っています.登録のシミュレーションを開始します.
ステップ1:phpのcurlシミュレーションを利用してログインページを要求するとログインページに戻り、正規表現を利用して_を抽出することができます.VIEWSTATEフィールドの内容は、同時にこのページのクッキーを取得し、このクッキーを使って検証コードピクチャを要求してこそ、検証コードが一致することが保証されます.ここで得たクッキーと_VIEW STATEは残して、後は登録用の到着をシミュレーションします.他の人のやり方を見たらクッキーをファイルに保存してから読みます.私のやり方は一つのphpファイルの中で、取得したログインページクッキーと_VIEWSTATEはcookieとして保存して、検証コードのピクチャを出力します.これを参照すると、認証コードのピクチャが表示されます.そして登録したphpを書いてこのクッキーを読みに行きます.以下はcodeimg.phpです.
<?php
	header("Content-Type: application/json; charset=gbk");
	header("Content-Type: image/jpeg");
	$url='http://210.44.159.22/default2.aspx';//    
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL,$url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_HEADER,true);
	$contents =curl_exec($ch);
	preg_match('/Set-Cookie: (.*);/iU',$contents,$str); //    
	$cookie = $str[1]; //  COOKIE(SESSIONID)
	$verify_code_url='http://210.44.159.22/CheckCode.aspx';//     
	curl_setopt($ch, CURLOPT_URL, $verify_code_url);
	curl_setopt($ch, CURLOPT_HEADER,0);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch,CURLOPT_COOKIE,$cookie);
	$img = curl_exec($ch);
	curl_close($ch);
	echo $img;//    
	$pattern = '/<input type="hidden" name="__VIEWSTATE" value="(.*?)" \/>/is';//           
	preg_match_all($pattern,$contents,$matchs);
	setcookie("message",$matchs[1][0]."&".$cookie);//     cookie        cookie
?>
私は自分でhtmlページを書いて、ajaxを通じてphpと通信しました.前に記入した学号のパスワードを取得して、認証コードはajaxを通じて後端のload.phpに送信して、load.phpの中でアナログ登録して、そして授業表に取得して、下にいくつかのload.phpのコードを貼ります.これはデータ準備です.
$message=$_COOKIE['message'];//       cookie
	$arr = explode('&',$message);
	$data=array("xuehao"=>$_POST['xuehao'],//  ajax    
	"pwd"=>$_POST["pwd"],//  ajax    
	"yzm"=>$_POST["yzm"],//  ajax     
	"viewstate"=>$arr[0],
	"cookie"=>$arr[1]
	);//
	$url='http://210.44.159.22/default2.aspx';//        ,           
	$post=array(
        '__VIEWSTATE'=>$data["viewstate"],
        'txtUserName'=>$data["xuehao"],
        'TextBox2'=>$data["pwd"],
        'txtSecretCode'=>$data["yzm"],
        'RadioButtonList1'=>'  ',
        'Button1'=>'',
        'lbLanguage'=>'',
        'hidPdrs'=>'',
        'hidsc'=>''
    );//POST     
自分で書いた関数が足りないように注意してください.setopt($ch、CURLOPT HuFOLLOWLOCATION、true);TrueCrypt 302ジャンプ後のページをキャプチャするために、正規の教務システムが登録されてから一つにジャンプします.http://210.44.159.22/xs_main.aspx?xh=学号ページ、そしてガールズを少なくしてはいけません.setopt($ch、CURLOPT_UREFERER、教務システムのその住所に登録してください).これを追加しないと、模擬要求の授業時間にObject move to hereのページに戻ります.
function login_post($url,$cookie,$post,$fromurl){
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36');
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER,true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  //       , echo  
		//curl_setopt($ch, CURLOPT_COOKIEFILE,$cookie);
		curl_setopt($ch, CURLOPT_COOKIE,$cookie);
		if($post!="")
		{	
			curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);  //  ,       
			curl_setopt($ch,CURLOPT_POSTFIELDS,$post);  //post    
		}else{
			curl_setopt($ch, CURLOPT_REFERER,$fromurl);
			curl_setopt($ch,CURLOPT_BINARYTRANSFER,true);
		}
        $result=curl_exec($ch);
		curl_close($ch);
        return $result;
	}//curl  
それから始めます.
<span style="white-space:pre">	</span>$con2=login_post($url,$data["cookie"],http_build_query($post),"");//         ,        
	$pattern = '/<span id="xhxm">(.*?)  <\/span>/is';
	//          ,             ,      
	if(!preg_match_all($pattern,$con2,$matchs)){//    
		$p = '/<script .*?>alert[(]\'(.*?)\'[)];.*?<\/script>/i';
		if(preg_match($p,$con2,$ex))
		{	
			$error=iconv('gbk','UTF-8',$ex[1]);
		}
	}else{//    
	<span style="white-space:pre">	$urls='http://210.44.159.22/xskbcx.aspx?xh='.$data["xuehao"];//    
<span style="white-space:pre">		</span>$refer='http://210.44.159.22/xs_main.aspx?xh='.$data["xuehao"];</span>
		$con2=login_post($urls,$data["cookie"],"",$refer);
		$pattern='/<td align="Center" rowspan=".*?".*?>(.*?)<\/td>/is';
<span style="white-space:pre">		preg_match_all($pattern,$con2,$matchs)</span>;
		
	}
入力した情報が間違っていなければ、最後に戻ってきた配列$matchの中にはあなたのすべての授業があります.最後に自分で処理して、フロントエンドに戻って表示すればいいです.最後に私の捕まえた授業表を貼ります.


ログインが成功したら、他の操作を真似してもいいです.例えば、成績を調べるなら、原理は大体同じです.それから私も初心者です.間違ったところは教えてください.すべてのソースを見たいのですが、コメントエリアでお願いします...このままでいいです.