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的一个完整SMTP类(解决邮件服务器需要验证时的问题)
Oct 09 PHP
输出控制类
Oct 09 PHP
如何写php程序?
Dec 08 PHP
php 数组使用详解 推荐
Jun 02 PHP
php中使用接口实现工厂设计模式的代码
Jun 17 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
Oct 06 PHP
PHP SPL标准库之SplFixedArray使用实例
May 12 PHP
PHP使用缓存即时输出内容(output buffering)的方法
Aug 03 PHP
优化WordPress的Google字体以加速国内服务器上的运行
Nov 24 PHP
php实现跨域提交form表单的方法【2种方法】
Oct 17 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
May 15 PHP
laravel框架上传图片实现实时预览功能
Oct 14 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
第一个无线电台是由谁发明的
2021/03/01 无线电
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
filemanage功能中用到的common.js
2007/04/08 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
异步安全加载javascript文件的方法
2015/07/21 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
2016/10/28 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
2018/02/09 Javascript
Angular模版驱动表单的使用总结
2018/05/05 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
Python正则表达式学习小例子
2020/03/03 Python
python使用openpyxl操作excel的方法步骤
2020/05/28 Python
公安局负责人查摆问题及整改方案
2014/09/27 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
2015年招生工作总结
2015/05/04 职场文书
初一军训感言
2015/08/01 职场文书
XX部保密工作制度范本
2019/08/27 职场文书
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技