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 相关文章推荐
实现了一个PHP5的getter/setter基类的代码
Feb 25 PHP
PHP similar_text 字符串的相似性比较函数
May 26 PHP
php代码运行时间查看类代码分享
Aug 06 PHP
PHP高级编程实例:编写守护进程
Sep 02 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
Nov 06 PHP
PHP curl伪造IP地址和header信息代码实例
Apr 27 PHP
10款PHP开源商城系统汇总介绍
Jul 23 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
PHP中header用法小结
May 23 PHP
详解php语言最牛掰的Laravel框架
Nov 20 PHP
PHP实现断点续传乱序合并文件的方法
Sep 06 PHP
PHP的简单跳转提示的实现详解
Mar 14 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
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
很好用的PHP数据库类
2009/05/27 PHP
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
PHP框架性能测试报告
2016/05/08 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
2020/05/02 PHP
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
js实现简单的星级选择器提交效果适用于评论等
2013/10/18 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
JS实现的车标图片提示效果代码
2015/10/10 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
python实现拓扑排序的基本教程
2018/03/11 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
简单了解Python write writelines区别
2020/02/27 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
2020/12/08 Python
电大毕业生自我鉴定
2013/11/10 职场文书
个人自荐信
2013/12/05 职场文书
大学生就业意向书范文
2014/04/01 职场文书
单位活动策划方案
2014/08/17 职场文书
旷课检讨书500字
2014/10/14 职场文书
南京南京观后感
2015/06/02 职场文书
浅谈vue2的$refs在vue3组合式API中的替代方法
2021/04/18 Vue.js
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android