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 相关文章推荐
VFP与其他应用程序的集成
Oct 09 PHP
一个简单的PHP入门源程序
Oct 09 PHP
文件系统基本操作类
Nov 23 PHP
9个PHP开发常用功能函数小结
Jul 15 PHP
编写安全 PHP应用程序的七个习惯深入分析
Jun 08 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
PHP加密技术的简单实现
Sep 04 PHP
php注册和登录界面的实现案例(推荐)
Oct 24 PHP
PHP微信PC二维码登陆的实现思路
Jul 13 PHP
PHP实现的装箱算法示例
Jun 23 PHP
Ajax请求PHP后台接口返回信息的实例代码
Aug 21 PHP
浅谈PHP中的那些魔术常量
Dec 02 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
php几个预定义变量$_SERVER用法小结
2014/11/07 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
Thinkphp5框架使用validate实现验证功能的方法
2019/08/27 PHP
javascript 面向对象的JavaScript类
2010/05/04 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
jQuery学习笔记之jQuery+CSS3的浏览器兼容性
2015/01/19 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
基于jQuery实现顶部导航栏功能
2016/12/27 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
2018/05/04 Javascript
小程序登录态管理的方法示例
2018/11/13 Javascript
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
python3安装speech语音模块的方法
2018/12/24 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
2019/02/20 Python
python web框架 django wsgi原理解析
2019/08/20 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
python2.7使用scapy发送syn实例
2020/05/05 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
越南综合购物网站:Lazada越南
2019/06/10 全球购物
Yankee Candle官网:美国最畅销蜡烛品牌之一
2020/01/05 全球购物
大学生就业自荐信
2013/10/26 职场文书
大学竞选班长演讲稿
2014/04/24 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
领导干部失职检讨书
2015/05/05 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL