当前位置:首页 > PHP教程 > php高级应用 > 列表

php CURL带有验证码验证登录的例子

发布:smiling 来源: PHP粉丝网  添加日期:2014-09-22 14:01:50 浏览: 评论:0 

以前我们写过很多利用curl模拟登录的,今天我来介绍两个例子都可以实现对方网站有验证码图片时由用户输入验证码之后再验证.

例子,读取远程的验证码利用框架加载到此页面然后手工输入,代码如下:

  1. <?php 
  2. /** 
  3.  * @author 追逐__something 
  4.  * @version $id 
  5.  */ 
  6. define('SCRIPT_ROOT',dirname(__FILE__).'/'); 
  7. $act = trim($_REQUEST['act']); 
  8. switch($act
  9.     case 'login'
  10.         // 获取验证码 
  11.         $code = trim($_REQUEST['code']); 
  12.          
  13.         // $loginParams为curl模拟登录时post的参数 
  14.         $loginParams['act'] = 'login'
  15.         $loginParams['password'] = '111111'
  16.         $loginParams['username'] = 'wlpadmin'
  17.         $loginParams['vcode'] = $code
  18.          
  19.         // $cookieFile 为加载验证码时保存的cookie文件名  
  20.         $cookieFile = SCRIPT_ROOT.'cookie.tmp'
  21.          
  22.         // $targetUrl curl 提交的目标地址 www.phpfensi.com 
  23.         $targetUrl = 'http://local.xx.com/admin/login.php'
  24.          
  25.         // 参数重置 
  26.         $content = curlLogin($targetUrl$cookieFile$loginParams); 
  27.         echo $content
  28.     break
  29.     case 'authcode'
  30.         // Content-Type 验证码的图片类型 
  31.         header('Content-Type:image/png'); 
  32.         showAuthcode('http://local.xx.com/admin/vcode.php?r=0.03192671708666017'); 
  33.         exit
  34.     break
  35.  
  36. /** 
  37.  * 模拟登录 
  38.  * @param string $url 提交到的地址 
  39.  * @param string $cookieFile 保存cookie的文件 
  40.  * @param string $loginParams 提交时要post的参数 
  41.  * @return string $content 返回的内容 
  42.  */ 
  43. function curlLogin($url$cookieFile$loginParams
  44.     $ch = curl_init($url); 
  45.     curl_setopt($ch,CURLOPT_COOKIEFILE, $cookieFile); //同时发送Cookie 
  46.     curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); 
  47.     curl_setopt($ch,CURLOPT_POST, 1); 
  48.     curl_setopt($ch,CURLOPT_POSTFIELDS, $loginParams); //提交查询信息 
  49.     $content = curl_exec($ch); 
  50.     curl_close($ch); 
  51.     return $content
  52.  
  53. /** 
  54.  * 加载目标网站图片验证码 
  55.  * @param string $authcode_url 目标网站验证码地址 
  56.  */ 
  57. function showAuthcode( $authcode_url ) 
  58.     $cookieFile = SCRIPT_ROOT.'cookie.tmp'
  59.     $ch = curl_init($authcode_url); 
  60.     curl_setopt($ch,CURLOPT_COOKIEJAR, $cookieFile); // 把返回来的cookie信息保存在文件中 
  61.     curl_exec($ch); 
  62.     curl_close($ch); 
  63. ?> 
  64. <iframe src="?act=authcode" style='width: 100px; height:40px ' frameborder=0 ></iframe> 
  65. <form> 
  66. <input type="hidden" name="act" value="login"
  67. <input type="text" name="code" /> 
  68. <input type="submit" name="submit" > 
  69. </form> 

例子:思路就是获取到验证码之后把验证码存储为一个图片,然后程序休眠20秒,在20秒之后由用户手动查看图片,并把验证码填写到code.txt文件中,20秒休眠完成后,程序会读code.txt的验证码,这样再带着验证码进行登录操作,代码如下:

  1. //初始化变量 
  2. $cookie_file = "tmp.cookie"
  3. $login_url = "http://xxx.com/logon.php"
  4. $verify_code_url = "http://xxx.com/verifyCode.php"
  5.  
  6. echo "正在获取COOKIE...n"
  7. $curlj = curl_init(); 
  8. $timeout = 5; 
  9. curl_setopt($curl, CURLOPT_URL, $login_url); 
  10. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
  11. curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout); 
  12. curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie_file); //获取COOKIE并存储 
  13. $contents = curl_exec($curl); 
  14. curl_close($curl); 
  15.  
  16. echo "COOKIE获取完成,正在取验证码...n"
  17. //取出验证码 www.phpfensi.com 
  18. $curl = curl_init(); 
  19. curl_setopt($curl, CURLOPT_URL, $verify_code_url); 
  20. curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file); 
  21. curl_setopt($curl, CURLOPT_HEADER, 0); 
  22. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
  23. $img = curl_exec($curl); 
  24. curl_close($curl); 
  25.  
  26. $fp = fopen("verifyCode.jpg","w"); 
  27. fwrite($fp,$img); 
  28. fclose($fp); 
  29. echo "验证码取出完成,正在休眠,20秒内请把验证码填入code.txt并保存n"
  30. //停止运行20秒 
  31. sleep(20); 
  32.  
  33. echo "休眠完成,开始取验证码...n"
  34. $code = file_get_contents("code.txt"); 
  35. echo "验证码成功取出:$coden"
  36. echo "正在准备模拟登录...n"
  37.  
  38. $post = "username=maben&pwd=hahahaha&verifycode=$code"
  39. $curl = curl_init(); 
  40. curl_setopt($curl, CURLOPT_URL, $url); 
  41. curl_setopt($curl, CURLOPT_HEADER, false); 
  42. curl_setopt($curl, CURLOPT_RETURNTRANSFER,1); 
  43. curl_setopt($curl, CURLOPT_POSTFIELDS, $post); 
  44. curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file); 
  45. $result=curl_exec($curl); 
  46. curl_close($curl); 
  47.  
  48. //这一块根据自己抓包获取到的网站上的数据来做判断 
  49. if(substr_count($result,"登录成功")){ 
  50.  echo "登录成功n"
  51. }else
  52.  echo "登录失败n"
  53.  exit
  54. }

Tags: php CURL CURL验证登录

分享到: