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 相关文章推荐
深入Memcache的Session数据的多服务器共享详解
Jun 13 PHP
具有时效性的php加密解密函数代码
Jun 19 PHP
解析PHP实现下载文件的两种方法
Jul 05 PHP
如何取得中文字符串中出现次数最多的子串
Aug 08 PHP
PHP迭代器的内部执行过程详解
Nov 12 PHP
Yii Framework框架获取分类下面的所有子类方法
Jun 20 PHP
PHP Oauth授权和本地加密实现方法
Aug 12 PHP
PHP简单预防sql注入的方法
Sep 27 PHP
详解PHP序列化和反序列化原理
Jan 15 PHP
PHP简单实现正则匹配省市区的方法
Apr 13 PHP
php7性能提升的原因详解
Oct 13 PHP
PHP7 错误处理机制修改
Mar 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
图书管理程序(一)
2006/10/09 PHP
PHP+APACHE实现用户论证的方法
2006/10/09 PHP
php图片验证码代码
2008/03/27 PHP
php 小乘法表实现代码
2009/07/16 PHP
php中神奇的fastcgi_finish_request
2011/05/02 PHP
php实现json编码的方法
2015/07/30 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
Jquery中ajax方法data参数的用法小结
2014/02/12 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
2014/04/02 Javascript
javascript如何判断输入的url是否正确
2014/04/11 Javascript
jQuery使用元素属性attr赋值详解
2015/02/27 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
举例讲解jQuery中可见性过滤选择器的使用
2016/04/18 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
python中的闭包用法实例详解
2015/05/05 Python
Python3中的2to3转换工具使用示例
2015/06/12 Python
python executemany的使用及注意事项
2017/03/13 Python
python实现媒体播放器功能
2018/02/11 Python
python kmeans聚类简单介绍和实现代码
2018/02/23 Python
python获取url的返回信息方法
2018/12/17 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
幼儿园中班新学期寄语
2014/01/18 职场文书
医药个人求职信范文
2014/01/29 职场文书
工程造价专业求职信
2014/07/17 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
贫困证明书范文
2015/06/16 职场文书
2016教师国培研修感言
2015/12/08 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
基于Redis位图实现用户签到功能
2021/05/08 Redis
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS