PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
发布:smiling 来源: PHP粉丝网 添加日期:2021-03-24 15:59:00 浏览: 评论:0
这篇文章主要介绍了PHP使用CURL实现对带有验证码的网站进行模拟登录的方法,可以帮助读者加深对CURL操作的理解与应用,需要的朋友可以参考下。
网上的很多模拟登录程序,大都是通过服务程序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,开始做你想做的事吧。。。。。
Tags: CURL PHP验证码 PHP模拟登录
- 上一篇:php多任务程序实例解析
- 下一篇:php实现与erlang的二进制通讯实例解析
相关文章
- ·php curl常见错误:SSL错误、bool(false)(2013-11-30)
- ·curl out of memory window下PHP调用curl报内存不够(2013-12-06)
- ·windows 下 php curl 的支持配置方法(2013-12-06)
- ·PHP 利用curl_init发起http请求模仿登录(2014-01-06)
- ·php curl 伪造IP来源程序实现代码(2014-01-07)
- ·php curl 分离header和body信息(2014-01-07)
- ·PHP curl 获取响应的状态实例(2014-01-08)
- ·php curl模块模拟登录后采集页面实例(2014-01-08)
- ·PHP Curl多线程实现原理与实例详解(2014-01-09)
- ·Drupal 通过cURL Post方式发送一个文件(2014-01-10)
- ·php 通过curl post发送json数据实例(2014-01-10)
- ·php用Curl伪造客户端源IP(2014-01-10)
- ·php利用CURL函数登入163邮箱并获取自己的通讯录(2014-06-17)
- ·php中CURL实现多线程的笔记(2014-06-18)
- ·PHP利用Curl模拟登录并获取数据例子(2014-06-21)
- ·php中curl模拟登陆用户百度知道的例子(2014-06-29)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)