PHP使用CURL实现对带有验证码的网站进行模拟登录的方法


Posted in PHP onJuly 23, 2014

网上的很多模拟登录程序,大都是通过服务程序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 相关文章推荐
php2html php生成静态页函数
Dec 08 PHP
php selectradio和checkbox默认选择的实现方法详解
Jun 29 PHP
从零开始学YII2框架(一)通过Composer安装Yii2框架
Aug 20 PHP
php绘图之在图片上写中文和英文的方法
Jan 24 PHP
php实现的网络相册图片防盗链完美破解方法
Jul 01 PHP
php实现网页缓存的工具类分享
Jul 14 PHP
深入理解PHP变量的值类型和引用类型
Oct 21 PHP
浅析Laravel5中队列的配置及使用
Aug 04 PHP
使用phpQuery获取数组的实例
Mar 13 PHP
详解yii2使用多个数据库的案例
Jun 16 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
TP5框架实现的数据库备份功能示例
Apr 05 PHP
Yii使用CLinkPager分页实例详解
Jul 23 #PHP
ThinkPHP单字母函数(快捷方法)使用总结
Jul 23 #PHP
PHP中的use关键字概述
Jul 23 #PHP
ThinkPHP实现将SESSION存入MYSQL的方法
Jul 22 #PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
Jul 22 #PHP
ThinkPHP权限认证Auth实例详解
Jul 22 #PHP
ThinkPHP行为扩展Behavior应用实例详解
Jul 22 #PHP
You might like
自动生成文章摘要的代码[PHP 版本]
2007/03/20 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
JavaScript 学习笔记(四)
2009/12/31 Javascript
基于jquery的超简单上下翻
2010/04/20 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
JS重要知识点小结
2011/11/06 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
Linux下编译安装php libevent扩展实例
2015/02/14 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
优雅地使用loading(推荐)
2019/04/20 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
2020/03/09 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
python和bash统计CPU利用率的方法
2015/07/10 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
flask框架json数据的拿取和返回操作示例
2019/11/28 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
天巡全球:Skyscanner Global
2017/06/20 全球购物
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
电脑专业个人求职信范文
2014/02/04 职场文书
旷课检讨书3000字
2014/02/04 职场文书
《雪儿》教学反思
2014/04/17 职场文书
实验室标语
2014/06/21 职场文书
热情服务标语
2014/10/07 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
2015年科室工作总结
2015/04/10 职场文书
2015年端午节活动方案
2015/05/05 职场文书