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 相关文章推荐
一个ORACLE分页程序,挺实用的.
Oct 09 PHP
用PHP制作静态网站的模板框架(一)
Oct 09 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
Nov 01 PHP
php实现无限级分类实现代码(递归方法)
Jan 01 PHP
PHP源代码数组统计count分析
Aug 02 PHP
基于PHP Web开发MVC框架的Smarty使用说明
Apr 19 PHP
mcrypt启用 加密以及解密过程详细解析
Aug 07 PHP
php强制运行广告的方法
Dec 01 PHP
php统计数组元素个数的方法
Jul 02 PHP
PHP实现补齐关闭的HTML标签
Mar 22 PHP
详解PHP中的序列化、反序列化操作
Mar 21 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
Aug 01 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中进行身份认证
2006/10/09 PHP
同一空间绑定多个域名而实现访问不同页面的PHP代码
2006/12/06 PHP
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
应用开发中涉及到的css和php笔记分享
2011/08/02 PHP
php记录代码执行时间(实现代码)
2013/07/05 PHP
PHP实现读取一个1G的文件大小
2013/08/24 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
eval与window.eval的差别分析
2011/03/17 Javascript
document.getElementBy("id")与$("#id")有什么区别
2013/09/22 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
Python星号*与**用法分析
2018/02/02 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
python实现图片识别汽车功能
2018/11/30 Python
Python转换时间的图文方法
2019/07/01 Python
解决os.path.isdir() 判断文件夹却返回false的问题
2019/11/29 Python
python爬虫库scrapy简单使用实例详解
2020/02/10 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
环境工程专业自荐信范文
2014/03/18 职场文书
校园环保标语
2014/06/13 职场文书
认真学习保证书
2015/02/26 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP
公历12个月名称的由来
2022/04/12 杂记
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python
Python循环之while无限迭代
2022/04/30 Python