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开发负载均衡指南
Jul 17 PHP
php中CI操作多个数据库的代码
Jul 05 PHP
php数组的概述及分类与声明代码演示
Feb 26 PHP
phpmailer发送gmail邮件实例详解
Jun 24 PHP
php实现mysql事务处理的方法
Dec 25 PHP
php自定义错误处理用法实例
Mar 20 PHP
php操作MongoDB类实例
Jun 17 PHP
PHP接收json 并将接收数据插入数据库的实现代码
Dec 01 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
Jan 11 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
May 17 PHP
php + WebUploader实现图片批量上传功能
May 06 PHP
PHP实现抽奖功能实例代码
Jun 30 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
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
UCenter Home二次开发指南
2009/05/28 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
分享8个Laravel模型时间戳使用技巧小结
2020/02/12 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
深入理解jQuery中live与bind方法的区别
2013/12/18 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
2017/08/10 jQuery
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
在vue中使用G2图表的示例代码
2019/03/19 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
应届毕业生个人求职信范文
2014/01/29 职场文书
工程造价专业大学生职业规划范文
2014/03/09 职场文书
代理协议书
2014/04/22 职场文书
体育专业求职信
2014/07/16 职场文书
意向协议书
2015/01/27 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
求职推荐信范文
2015/03/27 职场文书
同学聚会通知短信
2015/04/20 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
如何基于python实现单目三维重建详解
2022/06/25 Python