PHP使用CURL模拟登录的方法


Posted in PHP onJuly 08, 2015

网上的很多模拟登录程序,大都是通过服务程序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 相关文章推荐
linux下删除7天前日志的代码(php+shell)
Jan 02 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
Apr 18 PHP
php递归创建和删除文件夹的代码小结
Apr 13 PHP
php中socket通信机制实例详解
Jan 03 PHP
详解PHP数组赋值方法
Nov 07 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
Dec 14 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
php表单处理操作
Nov 16 PHP
PHP实现Redis单据锁以及防止并发重复写入
Apr 10 PHP
PHP ADODB实现事务处理功能示例
May 25 PHP
PHP命名空间与自动加载类详解
Sep 04 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
Dec 07 PHP
一个PHP实现的轻量级简单爬虫
Jul 08 #PHP
PHP设置进度条的方法
Jul 08 #PHP
smarty内部日期函数html_select_date()用法实例分析
Jul 08 #PHP
php类的定义与继承用法实例
Jul 07 #PHP
php抽象类用法实例分析
Jul 07 #PHP
PHP导入导出Excel代码
Jul 07 #PHP
一张表搞清楚php is_null、empty、isset的区别
Jul 07 #PHP
You might like
php 高效率写法 推荐
2010/02/21 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
PHP实现多图上传和单图上传功能
2018/05/17 PHP
JS 进度条效果实现代码整理
2011/05/21 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
javascript 寻找错误方法整理
2014/06/15 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
2014/10/17 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
jQuery实现折线图的方法
2015/02/28 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
js转html实体的方法
2016/09/27 Javascript
详解angularjs中如何实现控制器和指令之间交互
2017/05/31 Javascript
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
关于layui导航栏不展示下拉列表的解决方法
2019/09/25 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
python2.7的编码问题与解决方法
2016/10/04 Python
Python中按键来获取指定的值
2019/03/02 Python
Python3日期与时间戳转换的几种方法详解
2019/06/04 Python
python实现电子书翻页小程序
2019/07/23 Python
python集合常见运算案例解析
2019/10/17 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
CSS3 transform的skew属性值图文详解
2014/07/21 HTML / CSS
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
是否有自动比较结构的方法
2015/06/03 面试题
会计的岗位职责
2014/03/15 职场文书
公司晚会主持词
2014/03/22 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
2015年少先队活动总结
2015/03/25 职场文书
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android