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 相关文章推荐
Blitz templates 最快的PHP模板引擎
Apr 06 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
Dec 29 PHP
PHP中设置时区方法小结
Jun 03 PHP
php读取csv数据保存到数组的方法
Jan 03 PHP
PHP实现将textarea的值根据回车换行拆分至数组
Jun 10 PHP
php中smarty模板条件判断用法实例
Jun 11 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
Apr 30 PHP
PHP pear安装配置教程
May 14 PHP
php 流程控制switch的简单实例
Jun 07 PHP
PHP flush 函数使用注意事项
Aug 26 PHP
PHP序列化的四种实现方法与横向对比
Nov 29 PHP
php+js实现的无刷新下载文件功能示例
Aug 23 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下批量挂马和批量清马代码
2011/02/27 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
php判断电子邮件是否正确方法
2018/12/04 PHP
PHP延迟静态绑定使用方法实例解析
2020/09/05 PHP
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
js如何改变文章的字体大小
2016/01/08 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
[46:49]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.19
2020/12/24 DOTA
Django中处理出错页面的方法
2015/07/15 Python
python 调用有道api接口的方法
2019/01/03 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
python实现随机加减法生成器
2020/02/24 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
毕业生医学检验求职信
2013/10/16 职场文书
技校学生个人职业生涯规划范文
2014/03/03 职场文书
司法所长先进事迹
2014/06/02 职场文书
教师自我剖析材料
2014/09/29 职场文书
幼师小班个人总结
2015/02/12 职场文书
党风廉正建设个人工作总结
2015/03/06 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书