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 相关文章推荐
JoshChen_web格式编码UTF8-无BOM的小细节分析
Aug 16 PHP
php中spl_autoload详解
Oct 17 PHP
PHP使用ob_start生成html页面的方法
Nov 07 PHP
php关闭warning问题的解决方法
May 17 PHP
[原创]smarty简单模板变量输出方法
Jul 09 PHP
php getcwd与dirname(__FILE__)区别详解
Sep 24 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 PHP
PHP实现Unicode编码相互转换的方法示例
Nov 17 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
Dec 07 PHP
php json转换相关知识(小结)
Dec 21 PHP
PHP大文件分块上传功能实例详解
Jul 22 PHP
详解laravel passport OAuth2.0的4种模式
Nov 04 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/02/22 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
原生js开发的日历插件
2017/02/04 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
使用travis-ci如何持续部署node.js应用详解
2017/07/30 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
2018/09/30 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
windows下python连接oracle数据库
2017/06/07 Python
Python 获取当前所在目录的方法详解
2017/08/02 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
阿里旅行:飞猪
2017/01/05 全球购物
全球虚拟主机商:HostGator
2017/02/06 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
网络教育自我鉴定
2014/02/04 职场文书
会走路的树教学反思
2014/02/20 职场文书
基层党组织建设整改方案
2014/09/16 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
服务员岗位职责
2015/02/03 职场文书
质检员岗位职责范本
2015/04/07 职场文书
妈妈别哭观后感
2015/06/08 职场文书
班主任培训研修日志
2015/11/13 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书