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 相关文章推荐
php checkdate、getdate等日期时间函数操作详解
Mar 11 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 PHP
php使用function_exists判断函数可用的方法
Nov 19 PHP
php删除文本文件中重复行的方法
Apr 28 PHP
浅谈php+phpStorm+xdebug配置方法
Sep 17 PHP
php限制文件下载速度的代码
Oct 20 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
Feb 22 PHP
深入理解PHP 数组之count 函数
Jun 13 PHP
Symfony查询方法实例小结
Jun 28 PHP
php实现商城购物车的思路和源码分析
Jul 23 PHP
PHP连接MySQL数据库三种实现方法
Dec 10 PHP
php7中停止php-fpm服务的方法详解
May 09 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
Zend 输出产生XML解析错误
2009/03/03 PHP
PHP 翻页 实例代码
2009/08/07 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
微信小程序 Animation实现图片旋转动画示例
2018/08/22 Javascript
Vue.js 事件修饰符的使用教程
2018/11/01 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
Python urlopen 使用小示例
2008/09/06 Python
Python中使用pprint函数进行格式化输出的教程
2015/04/07 Python
不可错过的十本Python好书
2017/07/06 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
python requests库的使用
2021/01/06 Python
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
介绍一下Linux文件的记录形式
2012/04/18 面试题
编程用JAVA解析XML的方式
2013/07/07 面试题
校领导推荐信
2013/11/01 职场文书
公司司机岗位职责
2014/02/07 职场文书
工程项目合作意向书
2015/05/08 职场文书
暂住证明怎么写
2015/06/19 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
Python基于Opencv识别两张相似图片
2021/04/25 Python
MySQL 十大常用字符串函数详解
2021/06/30 MySQL
Python OpenCV实现图像模板匹配详解
2022/04/07 Python