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 相关文章推荐
如何在PHP中使用Oracle数据库(5)
Oct 09 PHP
Windows2003 下 MySQL 数据库每天自动备份
Dec 21 PHP
PHP静态新闻列表自动生成代码
Jun 14 PHP
PHP开发框架总结收藏
Apr 24 PHP
PHP 强制下载文件代码
Oct 24 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
Jun 25 PHP
PHP实现服务器状态监控的方法
Dec 09 PHP
PHP中使用BigMap实例
Mar 30 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
May 25 PHP
PHP在线书签系统分享
Jan 04 PHP
thinkphp分页集成实例
Jul 24 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
php 获取客户端的真实ip
2009/11/30 PHP
解析dedecms空间迁移步骤详解
2013/05/15 PHP
php异常处理使用示例
2014/02/25 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
Javascript 判断客户端浏览器类型代码
2010/03/01 Javascript
web前端设计师们常用的jQuery特效插件汇总
2014/12/07 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
JS实现鼠标点击展开或隐藏表格行的方法
2015/03/03 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
详解js中==与===的区别
2017/01/08 Javascript
详解Javascript几种跨域方式总结
2017/02/27 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
Python标准库sched模块使用指南
2017/07/06 Python
Python简单实现的代理服务器端口映射功能示例
2018/04/08 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
利用PyTorch实现VGG16教程
2020/06/24 Python
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
TCP/IP模型的分界线
2012/12/01 面试题
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
《桂林山水》教学反思
2014/02/08 职场文书
先进事迹报告会主持词
2014/04/02 职场文书
本科生求职信
2014/06/17 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
2019年房屋委托租赁合同范本(通用版)!
2019/07/17 职场文书