PHP基于curl后台远程登录正方教务系统的方法


Posted in PHP onOctober 14, 2016

本文实例讲述了PHP基于curl后台远程登录正方教务系统的方法。分享给大家供大家参考,具体如下:

从去年想这个事情怎么解决,今年终于算是把他搞清楚了,但验证码必须要填。

如果你能像360抢票哪有自动识别验证码,那就没事了。废话不多扯了。回归正题

这里要用CURL。

设计思路:先登录页面获取COOKIES,然后拿着cookies找服务器要验证码。最后提供服务器需要的全部信息。

(这种思维是完全模拟游览器访问页面,根本区别出来是人还机器)

public function index(){
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url); //填对于的URL就可以了
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
 curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); //主要cookie的路径,本保存页面cookie
 curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //返回结果自动输出
 $response = curl_exec($ch);
 curl_close($ch);
}

访问正方教务系统的首页,第一获取页面中的HTML,第二是获取cookies。

其他的就想问?获取HTML有啥用?

如果你细心观察教务系统首页的HTML的话,你会发现里面有很多隐藏字段,而这些字段又是变化的。
所以你干脆把HTML都获取然后解析,然后把需要的字段都桃出来

PHP基于curl后台远程登录正方教务系统的方法

HTML结构

看到没有,那么的隐藏字段,都是提交数据的必须,而且不能多。

PHP基于curl后台远程登录正方教务系统的方法

页面效果

接下来我要将一个最重要的问题,怎么获取验证码?

开始我想直接

<img src="xxxx/CheckCode.aspx" />

不就行了?这样验证码虽然是出来,但这个验证码不属于你,所以在你存远程登录时候,都会告诉你,验证码错误

那怎么获取属于自己的验证码呢?这时候,自然想到的是cookies。

服务器是怎么区分游览器请求是不是同一个人,就看cookies里面的sessionid了

这样。你拿着你在首页获取到的cookies,再找服务器要你的验证码,它会给错?

public function getImg()
{
    $url = "http://xxxx/CheckCode.aspx";
    $filedir = SITE_PATH."/TMP/Cookies";
    $cookie_file = $filedir."/cookie.txt";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); //
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_TIMEOUT, "10");
    header("Content-type:image/gif"); //这个视不同图片格式不一样,请注意
    echo curl_exec($ch);
    curl_close($ch);
}

然后再在其他页面调用这个方法,你就可以获取到验证码。

CURL的PHP请求跟你游览器发出的PHP属于两个不同的线程,所以,他们的cookies是不同共用的。

这样你就可以登录了,但不要以为这样登录了,你可以操作全部功能了,那你就想错了。还有一个很小的细节。。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
Jun 20 PHP
Win下如何安装PHP的APC拓展
Aug 07 PHP
PHP调用JAVA的WebService简单实例
Mar 11 PHP
ThinkPHP CURD方法之page方法详解
Jun 18 PHP
php中rename函数用法分析
Nov 15 PHP
PHP编译安装时常见错误解决办法
May 28 PHP
全面解析PHP操作Memcache基本函数
Jul 14 PHP
分析PHP中单双引号的误区和双引号小隐患
Jul 19 PHP
PHP 传输会话curl函数的实例详解
Sep 12 PHP
PHP检测接口Traversable用法详解
Dec 29 PHP
PHP接口类(interface)的定义、特点和应用示例
May 18 PHP
thinkphp诸多限制条件下如何getshell详解
Dec 09 PHP
php车辆违章查询数据示例
Oct 14 #PHP
基于PHPexecl类生成复杂的报表表头示例
Oct 14 #PHP
php+jQuery递归调用POST循环请求示例
Oct 14 #PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 #PHP
PHP中多线程的两个实现方法
Oct 14 #PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
Oct 14 #PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 #PHP
You might like
对Session和Cookie的区分与解释
2007/03/16 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
PHP实现的博客欢迎提示功能(很特别哦)
2014/06/05 PHP
ThinkPHP模板IF标签用法详解
2014/07/01 PHP
php中socket通信机制实例详解
2015/01/03 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
详解PHP的Yii框架的运行机制及其路由功能
2016/03/17 PHP
php实用代码片段整理
2016/11/12 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
2018/10/12 PHP
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
2014/08/15 Javascript
jQuery实现两款有动画功能的导航菜单代码
2015/09/16 Javascript
简单实现Bootstrap标签页
2020/08/09 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
js中的reduce()函数讲解
2019/01/18 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
PyQt实现计数器的方法示例
2021/01/18 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
天网面试题
2013/04/07 面试题
摄影实习自我鉴定
2013/09/20 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
给老婆的检讨书
2015/01/27 职场文书
工作年限证明范本
2015/06/15 职场文书
Vue vee-validate插件的简单使用
2021/06/22 Vue.js
Redis入门基础常用操作命令整理
2022/06/01 Redis