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 is_dir() 判断给定文件名是否是一个目录
May 10 PHP
PHP的异常处理类Exception的使用及说明
Jun 13 PHP
PHP 二维数组根据某个字段排序的具体实现
Jun 03 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
php计算数组相同值出现次数的代码(array_count_values)
Jan 20 PHP
php与Mysql的一些简单的操作
Feb 26 PHP
php中简单的对称加密算法实现
Jan 05 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
Jan 17 PHP
PHP数据分析引擎计算余弦相似度算法示例
Aug 08 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
Ajax+Jpgraph实现的动态折线图功能示例
Feb 11 PHP
php的lavarel框架中join和orWhere的用法
Dec 28 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(2)――PHP类型
2010/02/15 PHP
PHP操作MongoDB GridFS 存储文件的详解
2013/06/20 PHP
php获得网站访问统计信息类Compete API用法实例
2015/04/02 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
关于文本限制字数的js代码
2007/04/02 Javascript
IE iframe的onload方法分析小结
2010/01/07 Javascript
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
2017/10/12 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
Vue实现购物车实例代码两则
2020/05/30 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
python执行get提交的方法
2015/04/29 Python
Python的re模块正则表达式操作
2016/05/25 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
2018/02/26 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
八皇后问题,输出了所有情况,不过有些结果只是旋转了90度
2016/08/15 面试题
什么是设计模式
2012/06/17 面试题
AJAX都有哪些有点和缺点
2012/11/03 面试题
Java语言程序设计测试题选择题部分
2014/04/03 面试题
高三语文教学反思
2014/01/15 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
机关保密承诺书
2014/06/03 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
2015教师年度工作总结范文
2015/04/07 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
年中了,该如何写好个人述职报告?
2019/07/02 职场文书
Python中else的三种使用场景
2021/06/16 Python
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电