인터넷상의 많은 시뮬레이션된 로그인 프로그램은 대부분 아파치 서비스 프로그램을 통해 실행됩니다. 인증 코드를 얻은 후 웹 페이지에 표시되고 입력된 다음 게시됩니다. 시뮬레이션 로그인, 로그인 후 수행하는 작업이 반드시 짧은 시간 내에 완료되는 것은 아니므로 이는 PHP의 최대 실행 시간에 따라 달라지며 일부 작업에는 충분한 권한이 없을 수 있습니다.
이 기사에서는 인증 코드를 획득하고 인증 코드를 이미지로 저장한 다음 20초 후에 사용자가 수동으로 이미지를 보고 인증을 입력하는 아이디어를 제공합니다. 파일에서 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并保存 "; //停止运行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,开始做你想做的事吧。。。。。
위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.