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
30 个很棒的PHP开源CMS内容管理系统小结
Oct 14 PHP
PHP分页详细讲解(有实例)
Oct 30 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
Apr 25 PHP
Linux中用PHP判断程序运行状态的2个方法
May 04 PHP
php合并数组中相同元素的方法
Nov 13 PHP
PHP+Mysql基于事务处理实现转账功能的方法
Jul 08 PHP
PHP调试及性能分析工具Xdebug详解
Feb 09 PHP
关于php 高并发解决的一点思路
Apr 16 PHP
PHP批量删除jQuery操作
Jul 23 PHP
详解php中curl返回false的解决办法
Mar 18 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 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/03 咖啡文化
php下保存远程图片到本地的办法
2010/08/08 PHP
flash用php连接数据库的代码
2011/04/21 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
Javascript 中的 &amp;&amp; 和 || 使用小结
2010/04/25 Javascript
jQuery用unbind方法去掉hover事件及其他方法介绍
2013/03/18 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
EasyUI的doCellTip实现鼠标放到单元格上提示单元格内容
2016/08/24 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 Javascript
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
VUE中鼠标滚轮使div左右滚动的方法详解
2020/12/14 Vue.js
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
python写的一个squid访问日志分析的小程序
2014/09/17 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
Python3+Appium安装使用教程
2019/07/05 Python
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
canvas 实现 github404动态效果的示例代码
2017/11/15 HTML / CSS
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
匡威德国官网:Converse德国
2019/01/26 全球购物
精彩自我鉴定
2014/01/16 职场文书
社区工作感言
2014/02/21 职场文书
个人安全生产承诺书
2014/05/22 职场文书
小学校长汇报材料
2014/08/20 职场文书
师德承诺书
2015/01/20 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
Python Matplotlib库实现画局部图
2021/11/17 Python
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android