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 相关文章推荐
第六节--访问属性和方法
Nov 16 PHP
PHP 加密与解密的斗争
Apr 17 PHP
php file_get_contents函数轻松采集html数据
Apr 22 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
Oct 12 PHP
php购物网站支付paypal使用方法
Nov 28 PHP
php printf输出格式使用说明
Dec 05 PHP
php inc文件使用的风险和注意事项
Nov 12 PHP
PHP扩展CURL的用法详解
Jun 20 PHP
PHP使用静态方法的几个注意事项
Sep 16 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
PHP根据key删除数组中指定的元素
Feb 28 PHP
PHP 文件上传限制问题
Sep 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 搜索框提示(自动完成)实例代码
2012/02/05 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
PHP的Yii框架中View视图的使用进阶
2016/03/29 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
vue实现添加标签demo示例代码
2017/01/21 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
慕课网题目之js实现抽奖系统功能
2017/09/19 Javascript
React 组件间的通信示例
2018/06/14 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
python二叉树遍历的实现方法
2013/11/21 Python
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
Python编程入门的一些基本知识
2015/05/13 Python
python调用百度语音识别api
2018/08/30 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
python一键去抖音视频水印工具
2018/09/14 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
澳大利亚在线购买葡萄酒:The Wine Collective
2020/02/20 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
人民调解员先进事迹材料
2014/05/08 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
工程项目经理岗位职责
2015/02/02 职场文书
七一晚会主持词
2015/06/29 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python
利用python做数据拟合详情
2021/11/17 Python
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android