1. 程式人生 > >PHP的curl帶驗證碼模擬登陸學校的教務系統(驗證碼已被自動識別,不需要輸入)

PHP的curl帶驗證碼模擬登陸學校的教務系統(驗證碼已被自動識別,不需要輸入)

初次使用curl模仿登陸成功,有什麼不好的地方多多指出。

我要模擬登陸的地址是:http://jwc.wyu.edu.cn/student/  

原本學校的教務系統是這樣的:

現在我做的模擬登陸介面是這樣的:


有沒發現少了什麼,沒錯就是驗證碼沒了,我們不用輸驗證碼也能愉快地登入了~~~~~~~~~~~~~

其實模擬登陸並不難,我們來第一步

獲取驗證碼並儲存驗證碼頁面對應的cookie

                //獲取圖片
		$judge = getImg("http://jwc.wyu.edu.cn/student/rndnum.asp","image.jpeg");
                //第一個引數是驗證碼生成地址,第二個引數隨便,作用是採集驗證碼的圖片並將這張圖片儲存為image.jpeg
		if($judge){//判斷圖片是否獲取成功
			$valid = new Valite();   //這裡採用了一個自動識別驗證碼的類
			$valid->setImage("image.jpeg");
			$valid->getHec();
			$validCode = $valid->run();
			// echo $validCode;
			$CookieFile = $judge; //獲取儲存好的cookie  (用curl_setopt($hander, CURLOPT_COOKIEJAR, $CookieFile);儲存的)
	}else{
			echo "<script>alert('自動獲取驗證失敗');window.location.href='index.html';</script>";
		}

這裡的驗證碼自動識別類可檢視網址:http://www.poboke.com/study/php-verification-code-identification-primary.html  這裡有詳解

第二步就是模擬登陸:

在第一步驗證碼和cookie都已經獲取了,剩下就是一些小細節,我先用火狐自帶的firebug抓下登陸後的包先

以上的兩個圖就是我們需要研究的重要資訊了,Post資訊是必須的,而請求頭中的 Referer 也經常需要偽造

        $user = $_POST['user'];//獲取來自登入介面post過來的賬號和密碼
	$password = $_POST['password'];
	$p="UserCode=".$user."&UserPwd=".$password."&Validate=".$validCode."&Submit=提交";//Post資訊(必須的)
	$ch = curl_init();
	// 2. 設定選項,包括URL
	$reffer = 'http://jwc.wyu.edu.cn/student/body.htm';
	curl_setopt($ch, CURLOPT_REFERER, $reffer);       //偽造Referer 請求頭中有 複製下來就行了
	curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0"); //偽造user-agent請求頭也有
	curl_setopt($ch,CURLOPT_URL, "http://jwc.wyu.edu.cn/student/logon.asp");//這裡填的是登入地址了(就是表單登入時action="xxx"提交的地址)
	curl_setopt($ch,CURLOPT_COOKIEFILE, $CookieFile);//傳送第一步儲存好的Cookie
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch,CURLOPT_POST, 1);//採用POST傳值方式
	curl_setopt($ch,CURLOPT_POSTFIELDS, $p);  //提交Post資訊
	curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);  //防止重定向 不填可能會跳轉頁面
	$s = curl_exec($ch);
	curl_close($ch);

第三步:

前面已經模擬登陸進來了,現在可以幹你想做的事,抓你想要的資訊了,程式碼貼上

$ch = curl_init();
	$reffer = 'http://jwc.wyu.edu.cn/student/menu.asp';  //這裡同樣是抓包,。。。。。這裡就自己抓吧(登入後的自己想要的網址)
	curl_setopt($ch, CURLOPT_REFERER, $reffer);//偽造Referer來源
	curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0");
	curl_setopt($ch,CURLOPT_URL, "http://jwc.wyu.edu.cn/student/f4_myscore.asp");  //這裡是我想要資訊的網址
	curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
	curl_setopt($ch,CURLOPT_COOKIEFILE, $CookieFile);//同時傳送Cookie
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
	$return = curl_exec($ch);
	echo $return;//輸出結果
	curl_close($ch);
就這樣我抓去了下面的資訊

呃~~~貌似暴露了自己的智商~~~~~~~到這裡就寫完了,原始碼下載地址是:http://yunpan.cn/cmKiR5PX7Eb2w  訪問密碼 b401