PHP的curl帶驗證碼模擬登陸學校的教務系統(驗證碼已被自動識別,不需要輸入)
阿新 • • 發佈:2019-01-10
初次使用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