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 相关文章推荐
PHP4与PHP3中一个不兼容问题的解决方法
Oct 09 PHP
php 设计模式之 工厂模式
Dec 19 PHP
php 正则匹配函数体
Aug 25 PHP
php 中英文语言转换类
Sep 07 PHP
php实现删除指定目录下相关文件的方法
Oct 20 PHP
php采集中国代理服务器网的方法
Jun 16 PHP
Yii中表单用法实例详解
Jan 05 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
Apr 30 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
Yii2.0实现的批量更新及批量插入功能示例
Jan 29 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
Jul 09 PHP
Yii框架操作cookie与session的方法实例详解
Sep 04 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一个找二层目录的小东东
2012/08/02 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
PHP屏蔽关键字实现方法
2016/11/17 PHP
php修改数组键名的方法示例
2017/04/15 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
javascript判断机器是否联网的2种方法
2013/08/09 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
SeaJS入门教程系列之完整示例(三)
2014/03/03 Javascript
jQuery获取动态生成的元素示例
2014/06/15 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
vue中用动态组件实现选项卡切换效果
2017/03/25 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
详解JavaScript中的链式调用
2020/11/27 Javascript
[01:24]DOTA2上海特锦赛OG战队抵达 专车接机入驻总统套房
2016/02/23 DOTA
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
Python爬虫模拟登录带验证码网站
2016/01/22 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
汽车驾驶求职信
2013/10/25 职场文书
医学院护理专业应届生求职信
2013/11/12 职场文书
项目副经理岗位职责
2013/12/30 职场文书
工程服务质量承诺书
2015/04/29 职场文书