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录入页面中动态从数据库中提取数据的实现
Oct 09 PHP
php adodb连接带密码access数据库实例,测试成功
May 14 PHP
php smarty 二级分类代码和模版循环例子
Jun 16 PHP
thinkphp学习笔记之多表查询
Jul 28 PHP
php实现指定字符串中查找子字符串的方法
Mar 17 PHP
8个PHP数组面试题
Jun 23 PHP
学习php设计模式 php实现观察者模式(Observer)
Dec 09 PHP
php metaphone()函数及php localeconv() 函数实例解析
May 15 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
Oct 29 PHP
详解PHP swoole process的使用方法
Aug 26 PHP
PHP实现类似题库抽题效果
Aug 16 PHP
PHP论坛实现积分系统的思路代码详解
Jun 01 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 读取输出其他文件的实现方法
2016/07/26 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
YUI Compressor压缩JavaScript原理及微优化
2013/01/07 Javascript
JavaScript输入邮箱自动提示实例代码
2014/01/13 Javascript
js从Cookies里面取值的简单实现
2014/06/30 Javascript
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
详解Vue组件实现tips的总结
2017/11/01 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
python操作mysql代码总结
2018/06/01 Python
Django更新models数据库结构步骤
2020/04/01 Python
Python Django路径配置实现过程解析
2020/11/05 Python
Jupyter Notebook 安装配置与使用详解
2021/01/06 Python
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
大学生应聘自荐信
2013/10/11 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
文艺晚会开场白
2015/05/29 职场文书
关于童年的读书笔记
2015/06/26 职场文书
运动会通讯稿600字
2015/07/20 职场文书
学习心得体会
2019/06/20 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android