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 相关文章推荐
JAVA/JSP学习系列之七
Oct 09 PHP
优化NFR之一 --MSSQL Hello Buffer Overflow
Oct 09 PHP
用PHP编写PDF文档生成器
Oct 09 PHP
PHP 危险函数全解析
Sep 09 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
php登陆页的密码处理方式分享
Oct 14 PHP
php 强制下载文件实现代码
Oct 28 PHP
PHP把网页保存为word文件的三种方法
Apr 01 PHP
php使用mysqli向数据库添加数据的方法
Mar 20 PHP
php获取linux命令结果的实例
Mar 13 PHP
利用Laravel生成Gravatar头像地址的优雅方法
Dec 30 PHP
php使用pecl方式安装扩展操作示例
Aug 12 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
PHP 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
php 冒泡排序 交换排序法
2011/05/10 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
php实现中文转数字
2016/02/18 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
js贪吃蛇网页版游戏特效代码分享(挑战十关)
2015/08/24 Javascript
Node.js程序中的本地文件操作用法小结
2016/03/06 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
vue2单元测试环境搭建
2018/05/24 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
jQuery动态生成的元素绑定事件操作实例分析
2019/05/04 jQuery
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
使用Python实现文字转语音并生成wav文件的例子
2019/08/08 Python
python3.8下载及安装步骤详解
2020/01/15 Python
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
南京某公司笔试题
2013/01/27 面试题
大学生创业项目方案
2014/03/08 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
财务人员入职担保书
2015/09/22 职场文书
求职信如何撰写?
2019/05/22 职场文书
如何利用Python实现一个论文降重工具
2021/07/09 Python
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript