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 相关文章推荐
服务器web工具 php环境下
Dec 29 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
May 02 PHP
php数据库抽象层 PDO
May 07 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 PHP
基于PHP读取csv文件内容的详解
Jun 18 PHP
php通过session防url攻击方法
Dec 10 PHP
PHP中使用xmlreader读取xml数据示例
Dec 29 PHP
PHP框架性能测试报告
May 08 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
May 11 PHP
thinkPHP多语言切换设置方法详解
Nov 11 PHP
PHP实现移除数组中为空或为某值元素的方法
Jan 07 PHP
ThinkPHP5.1验证码功能实现的示例代码
Jun 08 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笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
别了 JavaScript中的isXX系列
2012/08/01 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
jQuery 无刷新分页实例代码
2013/11/12 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
layui表格实现代码
2017/05/20 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
vue项目创建步骤及路由router
2020/01/14 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
Vue项目打包编译优化方案
2020/09/16 Javascript
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
Python 文件操作的详解及实例
2017/09/18 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
行政经理的岗位职责
2013/11/23 职场文书
思想专业自荐信范文
2013/12/25 职场文书
校长先进事迹材料
2014/02/01 职场文书
小学生五年级大队长竞选发言稿
2014/09/12 职场文书
离婚财产分隔协议书
2014/10/23 职场文书
基层党组织整改方案
2014/10/25 职场文书
搞笑老公保证书
2015/02/26 职场文书
2016春节慰问信范文
2015/03/25 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python