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

PHP使用CURL实现对带有验证码的网站进行模拟登录的方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-03-24 15:59:00 浏览: 评论:0 

这篇文章主要介绍了PHP使用CURL实现对带有验证码的网站进行模拟登录的方法,可以帮助读者加深对CURL操作的理解与应用,需要的朋友可以参考下。

网上的很多模拟登录程序,大都是通过服务程序apache之类的运行,获取到验证码之后显示在网页上,然后填上再POST出去,这样虽然看起来很友好,但是既然模拟登录,登录后所干的事情就不一定是短时间完成的,所以这就要受到php最大执行时间的限制,而且有些操作还有可能权限不足。

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

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

Tags: CURL PHP验证码 PHP模拟登录

分享到: