|
網上的很多模擬登錄程序,大都是通過服務程序apache之類的運行,獲取到驗證碼之后顯示在網頁上,然后填上再POST出去,這樣雖然看起來很友好,但是既然模擬登錄,登錄后所干的事情就不一定是短時間完成的,所以這就要受到php最大執行時間的限制,而且有些操作還有可能權限不足。
本文提供了一個程序實例,思路就是獲取到驗證碼之后把驗證碼存儲為一個圖片,然后程序休眠20秒,在20秒之后由用戶手動查看圖片,并把驗證碼填寫到code.txt文件中,20秒休眠完成后,程序會讀code.txt的驗證碼,這樣再帶著驗證碼進行登錄操作。具體代碼如下:
/** * 模擬登錄 *///初始化變量$cookie_file = "tmp.cookie";$login_url = "http://xxx.com/logon.php";$verify_code_url = "http://xxx.com/verifyCode.php";echo "正在獲取COOKIE.../n";$curlj = curl_init();$timeout = 5;curl_setopt($curl, CURLOPT_URL, $login_url);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie_file); //獲取COOKIE并存儲$contents = curl_exec($curl);curl_close($curl);echo "COOKIE獲取完成,正在取驗證碼.../n";//取出驗證碼$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $verify_code_url);curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);curl_setopt($curl, CURLOPT_HEADER, 0);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);$img = curl_exec($curl);curl_close($curl);$fp = fopen("verifyCode.jpg","w");fwrite($fp,$img);fclose($fp);echo "驗證碼取出完成,正在休眠,20秒內請把驗證碼填入code.txt并保存/n";//停止運行20秒sleep(20);echo "休眠完成,開始取驗證碼.../n";$code = file_get_contents("code.txt");echo "驗證碼成功取出:$code/n";echo "正在準備模擬登錄.../n";$post = "username=maben&pwd=hahahaha&verifycode=$code";$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_HEADER, false);curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);curl_setopt($curl, CURLOPT_POSTFIELDS, $post);curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);$result=curl_exec($curl);curl_close($curl);//這一塊根據自己抓包獲取到的網站上的數據來做判斷if(substr_count($result,"登錄成功")){ echo "登錄成功/n";}else{ echo "登錄失敗/n"; exit;}//OK,開始做你想做的事吧。。。。。
php技術:PHP使用CURL實現對帶有驗證碼的網站進行模擬登錄的方法,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。